1.概述:LNMP表明的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。Mysql是一個小型關係型數據庫管理系統。PHP是一種在服務器端執行的嵌入HTML文檔的腳本語言。這四種軟件均爲免費開源軟件,組合到一塊兒,成爲一個免費、高效、擴展性強的網站服務系統。php
2.優點:穩定、高效、功能豐富、維護簡易;html
第一步:瀏覽器發送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
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
Lamp:Apache通常是把PHP當作本身的一個模塊來啓動;數據庫
Lnmp:Ngnix則是把http請求變量轉發給PHP進程,即PHP獨立進程,與Nginx相獨立;瀏覽器
案例環境:
系統類型 |
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 |
案例步驟:
[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
[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
[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;
[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
[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 支持混淆級別
[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
[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
[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 ##後臺管理界面,用戶密碼爲安裝時指定