Nginx與PHP(FastCGI)的安裝、配置與最佳化
來源:互聯網
上載者:User
FastCGI的介紹和工作原理 首先簡單的介紹下FastCGI: FastCGI是語言無關的、可伸縮結構的CGI開放擴充,其主要行為是將CGI解譯器進行保持在記憶體中並因此獲得較高的效能。眾所周知,CGI解譯器的反覆載入是CGI效能低下的主要原因,如果CGI解譯器保持在記憶體中並接受FastCGI進程管理器調度,則可以提供良好的效能、伸縮性、Fail-Over特性等。 FastCGI的工作原理是: (1)FastCGI進程管理器自身初始化,啟動多個CGI解譯器進程(多個php-cgi進程)並等待來自Web Server的串連。在文本中,採用PHP-FPM進程管理器啟動多個php-cgi FastCGI進程。啟動php-cgi FastCGI進程時,可以配置以TCP和UNIX通訊端兩種方式啟動。 (2)當用戶端請求達到Web伺服器(Nginx)時,Web伺服器將請求採用TCP協議或UNIX通訊端方式轉寄到FastCGI主進程,FastCGI主進程選擇並串連到一個CGI解譯器(子進程)。Web伺服器將CGI環境變數和標準輸入發送到FastCGI子進程php-cgi。 (3)FastCGI子進程完成處理後將標準輸出和錯誤資訊從同一串連返回Web伺服器(Nginx)。當FastCGI子進程關閉串連時,請求便告知處理完成。FastCGI子進程接著等待並處理來自FastCGI進程管理的下一個串連。而在一般的普通CGI模式中,php-cgi在此便退出了。 PHP-FPM PHP-FPM是一個PHP FastCGI管理器,是只用於PHP的,可以在 http://cn2.php.net/downloads.php下載得到.PHP-FPM其實是PHP原始碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP原始碼中,在編譯安裝PHP後才可以使用。 新版PHP已經整合php-fpm了,不再是第三方的包了,推薦使用。PHP-FPM提供了更好的PHP進程管理方式,可以有效控制記憶體和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數即可開啟PHP-FPM,其它參數都是配置php的,具體選項含義可以查看這裡。 安裝前準備: yum -y install gcc automake autoconf libtool make yum -y install gcc gcc-c++ glibc yum -y install libmcrypt-devel mhash-devel libxslt-devel \libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \krb5 krb5-devel libidn libidn-devel openssl openssl-devel 新版php-fpm安裝(推薦安裝方式) wget http://us1.php.net/get/php-5.5.10.tar.gz/from/this/mirrortar zvxf php-5.5.10.tar.gzcd php-5.5.10./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt \--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets \--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \--with-gd --with-jpeg-dir make all install 完成php-fpm後,對其運行使用者進行配置: cd /usr/local/phpcp etc/php-fpm.conf.default etc/php-fpm.confvi etc/php-fpm.conf 修改:user = nginxgroup = nginx 如果nginx使用者不存在,那麼先添加nginx使用者groupadd nginxuseradd -g nginx nginx 修改nginx設定檔以支援php-fpm # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params;} 建立測試php檔案 在/usr/local/nginx/html下建立index.php檔案,輸入如下內容 <?php echo phpinfo();?> 啟動php-fpm和nginx 12/usr/local/php/sbin/php-fpm /usr/local/nginx/nginx