部署LNMP應用平臺

1、LNMP應用平臺概述

1.概述:LNMP表明的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。Mysql是一個小型關係型數據庫管理系統。PHP是一種在服務器端執行的嵌入HTML文檔的腳本語言。這四種軟件均爲免費開源軟件,組合到一塊兒,成爲一個免費、高效、擴展性強的網站服務系統。php

2.優點:穩定、高效、功能豐富、維護簡易;html

2、內部實現原理

1.處理http請求流程:

第一步:瀏覽器發送http request請求到服務器(Nginx),服務器響應並處理web請求,將一些靜態資源(CSS,圖片,視頻等)保存服務器上。node

第二步:將php腳本經過接口傳輸協議(網關協議)PHP-FCGI(fast-cgi)傳輸給PHP-FPM(進程管理程序),PHP-FPM不作處理,而後PHP-FPM調用PHP解析器進程,PHP解析器解析php腳本信息。PHP解析器進程能夠啓動多個,進行併發執行。mysql

第三步:將解析後的腳本返回到PHP-FPM,PHP-FPM再經過fast-cgi的形式將腳本信息傳送給Nginx。linux

第四步:服務器再經過Http response的形式傳送給瀏覽器。瀏覽器再進行解析與渲染而後進行呈現。nginx

2.Nginx + FastCGI實現:

Nginx不支持對外部程序的直接調用或者解析,全部的外部程序(包括PHP)必須經過Fast-CGI接口來調用; web

wrapper:爲了調用CGI程序,還須要一個Fast-CGI的wrapper(wrapper能夠理解爲用於啓動另外一個程序的程序),這個wrapper綁定在某個固定socket上,如端口或者文件socket。當Nginx將CGI請求發送給這個socket的時候,經過Fast-CGI接口,wrapper接收到請求,而後Fork(派生)出一個新的線程,這個線程調用解釋器或者外部程序處理腳本並讀取返回數據;接着,wrapper再將返回的數據經過Fast-CGI接口,沿着固定的socket傳遞給Nginx;最後,Nginx將返回的數據(html頁面或者圖片)發送給客戶端。這就是Nginx+Fast-CGI的整個運做過程。sql

3.lamp與lnmp的區別:

Lamp:Apache通常是把PHP當作本身的一個模塊來啓動;數據庫

Lnmp:Ngnix則是把http請求變量轉發給PHP進程,即PHP獨立進程,與Nginx相獨立;瀏覽器

3、案例:搭建LNMP並測試項目

案例環境:

系統類型

IP地址

主機名

所需軟件

Centos 6.5

192.168.100.150

www.linuxfan.cn

nginx-1.6.2.tar.gz、

cmake-2.8.6.tar.gz、

mysql-5.5.22.tar.gz、

libmcrypt-2.5.8.tar.gz、

mhash-0.9.9.9.tar.gz、

mcrypt-2.6.8.tar.gz、

php-5.3.28.tar.gz、

SKYUC.v3.4.2.SOURCE.zip

 

 

 

 

 

 

 

 

 

 

 

 

 

案例步驟:

  • 安裝並配置Nginx服務;
  • 安裝mysql數據庫服務;
  • 配置初始化mysql及其優化;
  • 安裝php服務程序;
  • 優化調整php服務;
  • 配置nginx服務使用php的FPM模塊來調用php環境來處理php的頁面請求:
  • 配置Nginx支持php解析,編寫服務控制腳本:
  • 編輯測試頁面;
  • 客戶端訪問測試;
  • 發佈php項目:電影系統;
  • 客戶端訪問測試;

安裝並配置Nginx服務

[root@www ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl
[root@www ~]# useradd -M -s /sbin/nologin nginx
[root@www ~]# tar zxvf nginx-1.6.2.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/nginx-1.6.2/
[root@www nginx-1.6.2]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make && make install
[root@www nginx-1.6.2]# cd
[root@www ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@www ~]# nginx 
[root@www ~]# netstat -utlpn |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      5618/nginx

安裝mysql數據庫服務

[root@www ~]# rpm -e mysql  mysql-server  --nodeps
[root@www ~]# yum -y install ncurses ncurses-devel
[root@www ~]# tar zxvf cmake-2.8.6.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/cmake-2.8.6/
[root@www ~]# ./configure 
[root@www ~]# make &&make install
[root@www ~]# cd
[root@www ~]# tar zxvf mysql-5.5.22.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mysql-5.5.22/
[root@www mysql-5.5.22]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc/
[root@www mysql-5.5.22]# make &&make install

配置初始化mysql及其優化

[root@www mysql-5.5.22]# groupadd mysql
[root@www mysql-5.5.22]# useradd -M -s  /sbin/nologin  -g mysql  mysql
[root@www mysql-5.5.22]# chown mysql:mysql /usr/local/mysql/ -R
[root@www mysql-5.5.22]# cp support-files/my-medium.cnf /etc/my.cnf
cp:是否覆蓋"/etc/my.cnf"? y
[root@www mysql-5.5.22]# cp support-files/mysql.server /etc/init.d/mysqld
[root@www mysql-5.5.22]# chmod +x /etc/init.d/mysqld
[root@www mysql-5.5.22]# chkconfig --add mysqld
[root@www mysql-5.5.22]# echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
[root@www mysql-5.5.22]# source /etc/profile
[root@www mysql-5.5.22]# cd /usr/local/mysql/scripts/
[root@www scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
OK
Filling help tables...
OK
[root@www scripts]# cd
[root@www ~]# /etc/init.d/mysqld start
Starting MySQL...                                [肯定]
[root@www ~]# mysqladmin -uroot password 123123
[root@www ~]# mysql -uroot -p123123 
mysql> quit;

安裝php服務程序

[root@www ~]# rpm -e php --nodeps
[root@www ~]# tar zxvf /root/libmcrypt-2.5.8.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/libmcrypt-2.5.8/
[root@www ~]# ./configure &&make &&make install
[root@www ~]# ln -s /usr/local/lib/libmcrypt.* /usr/lib64/   
[root@www ~]# tar zxvf /root/mhash-0.9.9.9.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mhash-0.9.9.9/
[root@www ~]# ./configure &&make &&make install
[root@www ~]# ln -s /usr/local/lib/libmhash* /usr/lib64/   
[root@www ~]# tar zxvf /root/mcrypt-2.6.8.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mcrypt-2.6.8/
[root@www ~]# ./configure &&make &&make install

[root@www ~]# yum -y install libxml2-devel gd zlib-devel libpng-devel libjpeg-devel
[root@www ~]# tar zxvf php-5.3.28.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/php-5.3.28/
[root@www php-5.3.28]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm  --with-jpeg-dir=/usr/lib
註解: --prefix=/usr/local/php5 ##指定安裝位置 --with-gd ##加載gd擴展庫工具 --with-zlib ##加載壓縮工具 --with-mysql=/usr/local/mysql ##加載mysql數據庫的安裝位置 --with-config-file-path=/usr/local/php5 ##加載php的配置文件存放位置 --enable-mbstring ##加載多字符的支持 --enable-fpm ##加載fpm管理程序 --with-jpeg-dir=/usr/lib ##加載識別圖片格式

[root@www php-5. 3.28]# make &&make install
[root@www php-5. 3.28]# ls /usr/local/php5/
bin  etc  include  lib  php  sbin  var

優化調整php服務

[root@www php-5. 3.28]# cp php.ini-development /usr/local/php5/php.ini
[root@www php-5. 3.28]# cd
[root@www ~]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@www ~]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/
[root@www ~]# tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz            ##安裝ZendGuardLoader模塊
[root@www ~]# cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so  /usr/local/php5/
[root@www ~]# vi /usr/local/php5/php.ini            ##在最後位置添加如下內容:
[Zend Guard]
zend_extension=/usr/local/php5/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
註釋: zend_extension=/usr/local/php5/ZendGuardLoader.so ##加載模塊位置 zend_loader.enable=1 ##開啓該模塊 zend_loader.disable_licensing=0 ##禁用許可證檢查(提升性能) zend_loader.obfuscation_level_support=3 ##讓 Zend Guard Loader 支持混淆級別

配置nginx服務使用php的FPM模塊來調用php環境來處理php的頁面請求

[root@www ~]# cd /usr/local/php5/etc/
[root@www etc]# cp php-fpm.conf.default php-fpm.conf
[root@www etc]# vi php-fpm.conf              ##新建管理cgi接口的fpm模塊的配置文件
[global]
pid = run/php-fpm.pid
[www]
listen = 127.0.0.1:9000
user = nginx
group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35 
:wq
解釋: [global] ##全局配置區域 pid = run/php-fpm.pid ##指定程序運行時的pid文件 [www] ##www網站區域 listen = 127.0.0.1:9000 ##fpm管理程序監聽的地址和端口 user = nginx ##運行的用戶和組 group = nginx pm = dynamic ##指定fpm進程池的模式,動態模式 pm.max_children = 50 ##靜態方式下開啓的進程 pm.start_servers = 20 ##動態方式下啓動時開始的進程數 pm.min_spare_servers = 5 ##動態最小進程數 pm.max_spare_servers = 35 ##動態最大進程數
[root@www ~]# /usr/local/sbin/php-fpm                   ##啓動php-fpm
[root@www ~]# netstat -utpln |grep php
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      5587/php-fpm

配置Nginx支持php解析,編寫服務控制腳本

[root@www ~]# vi /etc/init.d/lnmp
#!/bin/bash
# chkconfig: 35 95 30
# description: This script is for LNMP Management!
NGF=/usr/local/nginx/sbin/nginx
NGP=/usr/local/nginx/logs/nginx.pid
FPMF=/usr/local/php5/sbin/php-fpm
FPMP=/usr/local/php5/var/run/php-fpm.pid
case $1 in 
   start)
      $NGF &&echo "nginx is starting! "
      $FPMF && echo "php-fpm is starting! "
   ;;
   stop)
      kill -QUIT $(cat $NGP) &&echo "nginx is stoped! "
      kill -QUIT $(cat $FPMP) &&echo "php-fpm is stoped! "
   ;;
   restart)
      $0 stop
      $0 start
   ;;
   reload)
      kill -HUP $(cat $NGP) 
      kill -HUP $(cat $FPMP)
   ;;
   status)
      netstat -utpln |grep nginx &>/dev/null 
      if [  $? -eq 0 ]
      then
         echo "nginx is running! "
      else
         echo "nginx is not running! "
      fi
      netstat -upltn |grep php-fpm &>/dev/null 
      if [ $? -eq 0 ]
      then
         echo "php-fpm is runing! "
      else
         echo "php-fpm is not running! "
      fi
   ;;
   *)
      echo "Usage $0 {start|stop|status|restart}"
      exit 1
   ;;
esac
[root@www ~]# chmod +x /etc/init.d/lnmp 
[root@www ~]# chkconfig --add lnmp 
[root@www ~]# /etc/init.d/lnmp status
nginx is running! 
php-fpm is runing! 

[root@www conf]# vi /usr/local/nginx/conf/nginx.conf                  ##主配置文件以下
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.linuxfan.cn;
        charset utf-8;
        location / {
            root   /var/www/linuxfan/;
            index  index.html index.htm index.php;
        }
    location ~\.php {                          ##訪問.php頁面的配置段
        root /var/www/linuxfan/;             ##php網頁文檔根目錄,html表明安裝nginx的目錄下的html目錄
        fastcgi_pass 127.0.0.1:9000;            ##php-fpm的監聽地址和端口號 fastcgi_index index.php; ##指定php首頁文件 include fastcgi.conf; ##包括fastcgi.conf樣本配置 }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@www conf]# /etc/init.d/lnmp restart

編輯測試頁面

[root@www ~]# mkdir -p /var/www/linuxfan
[root@www ~]# vi /var/www/linuxfan/index.html
www.linuxfan.cn
[root@www ~]# vi  /var/www/linuxfan/testa.php 
<?php
phpinfo();
?>
[root@www ~]# vi  /var/www/linuxfan/testm.php 
<?php
$link=mysql_connect('localhost','root','123123');
if($link) echo "mysql ok!";
mysql_close();
?>

客戶端訪問測試:

http://www.linuxfan.cn

http://www.linuxfan.cn/testa.php

http://www.linuxfan.cn/testa.php

發佈php項目:電影系統

[root@www ~]# yum -y install unzip
[root@www ~]# unzip SKYUC.v3.4.2.SOURCE.zip 
[root@www ~]# cd SKYUC.v3.4.2.SOURCE/
[root@www ~]# cp -rf  wwwroot  /var/www/linuxfan/skyuc
[root@www ~]# cd  /var/www/linuxfan/skyuc
[root@www ~]# chown  -R  nginx:nginx  admincp/  data/  templates/  upload/
[root@www ~]#mysql -uroot -p123123
> create database skyucdb;
> grant all on skyucdb.* to 'runskyuc'@'localhost' identified by '123123';
> quit;

客戶端訪問測試:

http://www.linuxfan.cn/skyuc/install/index.php ##安裝該系統

http://www.linuxfan.cn/skyuc ##普通用戶訪問該系統

http://www.linuxfan.cn/skyuc/admincp ##後臺管理界面,用戶密碼爲安裝時指定

相關文章
相關標籤/搜索