Nginx搭建LNMP、WEB

企業級LNMP WEB架構實戰

1、CGI和FastCGI概念剖析
公共網關接口”(Common Gateway Interface,CGI),是HTTP服務器與本機或者其它機器上的程序進行通信的一種工具,其程序須運行在網絡服務器上。CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量,如php、perl、tcl等。
傳統CGI接口方式的主要缺點是性能很差,因爲每次HTTP服務器遇到動態程序時都需要重新啓動腳本解析器來執行解析,然後將結果返回給HTTP服務器。這在處理高併發訪問時幾乎是不可用的。另外傳統的CGI接口方式安全性也很差,現在已經很少使用。
Fast-CGI是從CGI發展改進而來的,FastCGI接口方式採用C/S結構,可以將HTTP服務器和腳本解析服務器分開,同時在腳本解析服務器上啓動一個或者多個腳本解析守護進程。當HTTP服務器每次遇到動態程序時,可以將其直接交付給Fast-CGI進程來執行,然後將得到的結果返回給瀏覽器。這種方式可以讓HTTP服務器專一地處理靜態請求或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。
FastCGI是語言無關的、可伸縮架構的CGI開放擴展,將CGI解釋器進程保持在內存中,以此獲得較高的性能。FastCGI是一個協議,php-fpm實現了這個協議,php-fpm的FastCGI協議需要有進程池,php-fpm實現的FastCGI進程叫php-cgi,所以php-fpm其實是他自身的FastCGI或php-cgi進程管理器。
2、LNMP架構工作原理
LNMP WEB架構中,Nginx爲一款高性能Web服務器,本身是不能處理PHP的,當接收到客戶端瀏覽器發送HTTP Request請求時,Nginx服務器響應並處理web請求,靜態資源CSS、圖片、視頻、TXT等靜態文件請求,Nginx服務器可以直接處理並回應。
PHP動態頁面請求Nginx不能直接處理,Nginx服務器會將PHP網頁腳本通過接口傳輸協議(網關協議)傳輸給PHP-FPM(進程管理程序)。
PHP-FPM調用PHP解析器(PHP-CGI)進程,PHP解析器解析PHP腳本信息。最後PHP解釋器將解析後的腳本返回到PHP-FPM,PHP-FPM再通過Fast-CGI的形式將腳本信息傳送給Nginx。如圖14-5所示:
在這裏插入圖片描述
圖14-5 Nginx+FastCGI通信原理圖
CGI、FAST-CGI、PHP-CGI、PHP-FPM概念總結:
 CGI:Common gateway interface 通用網關接口;
 FastCGI:Fast common gateway interface 快速通用網關接口;
 PHP-FPM:PHP-Fast CGI Process Manager CGI,是FastCGII協議的實現並且帶進程管理器;
 PHP-CGI是解析PHP代碼的程序,屬於PHP程序解釋器,只負責解析請求,不負責進程管理;
 PHP-FPM是PHP-CGI進程管理器,可以有效控制內存和進程、可以平滑重載PHP配置。
3、企業級LNMP源碼編譯步驟
(1) Nginx安裝配置
wget -c http://nginx.org/download/nginx-1.16.0.tar.gz
tar -xzf nginx-1.16.0.tar.gz
cd nginx-1.16.0
useradd www ;./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install
(2) MYSQL安裝配置
yum install -y gcc-c++ ncurses-devel cmake make perl gcc autoconf
yum install -y automake zlib libxml2 libxml2-devel libgcrypt libtool bison
wget -c http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.45.tar.gz
tar -xzf mysql-5.6.45.tar.gz
cd mysql-5.6.45
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56/
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DMYSQL_DATADIR=/data/mysql
-DSYSCONFDIR=/etc
-DMYSQL_USER=mysql
-DMYSQL_TCP_PORT=3306
-DWITH_XTRADB_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_READLINE=1
-DENABLED_LOCAL_INFILE=1
-DWITH_EXTRA_CHARSETS=1
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
-DWITH_BIG_TABLES=1
-DWITH_DEBUG=0
make
make install
#Config MYSQL Set System Service
cd /usr/local/mysql56/
\cp support-files/my-default.cnf /etc/my.cnf
\cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
service mysqld stop
mv /data/mysql/ /data/mysql.bak/
mkdir -p /data/mysql/
useradd mysql
/usr/local/mysql56/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/ --basedir=/usr/local/mysql56/
ln -s /usr/local/mysql56/bin/* /usr/bin/
service mysqld restart
(3) PHP安裝配置
yum install libxml2 libxml2-devel gzip bzip2 -y
wget -c http://mirrors.sohu.com/php/php-5.6.28.tar.bz2
tar jxf php-5.6.28.tar.bz2
cd php-5.6.28
./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-mysql=/usr/local/mysql56/
–enable-fpm
make
make install

#Config LNMP WEB and Start Server.
cp php.ini-development /usr/local/php5/etc/php.ini
cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod o+x /etc/init.d/php-fpm
/etc/init.d/php-fpm start
(4) Nginx配置文件配置
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 localhost;
location / {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME documentrootdocument_rootfastcgi_script_name;
include fastcgi_params;
}
}
}
(5) 測試LNMP架構測試,創建index.php測試頁面,如圖14-6所示:
在這裏插入圖片描述
圖14-6 LNMP企業實戰測試頁面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章