Nginx與PHP(FastCGI)的安裝、配置與優化

FastCGI的介紹和工做原理

  首先簡單的介紹下FastCGI:php

  FastCGI是語言無關的、可伸縮結構的CGI開放擴展,其主要行爲是將CGI解釋器進行保持在內存中並所以得到較高的性能。衆所周知,CGI解釋器的反覆加載是CGI性能低下的主要緣由,若是CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則能夠提供良好的性能、伸縮性、Fail-Over特性等。html

  FastCGI的工做原理是:mysql

  (1)FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程(多個php-cgi進程)並等待來自Web Server的鏈接。在文本中,採用PHP-FPM進程管理器啓動多個php-cgi FastCGI進程。啓動php-cgi FastCGI進程時,能夠配置以TCP和UNIX套接字兩種方式啓動。nginx

  (2)當客戶端請求達到Web服務器(Nginx)時,Web服務器將請求採用TCP協議或UNIX套接字方式轉發到FastCGI主進程,FastCGI主進程選擇並鏈接到一個CGI解釋器(子進程)。Web服務器將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。c++

  (3)FastCGI子進程完成處理後將標準輸出和錯誤信息從同一鏈接返回Web服務器(Nginx)。當FastCGI子進程關閉鏈接時,請求便告知處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理的下一個鏈接。而在通常的普通CGI模式中,php-cgi在此便退出了。sql

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的,具體選項含義能夠查看這裏curl

  安裝前準備:socket

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安裝(推薦安裝方式)php-fpm

wget http://us1.php.net/get/php-5.5.10.tar.gz/from/this/mirror
tar zvxf php-5.5.10.tar.gz
cd 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/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf

修改:
user = nginx
group = nginx

若是nginx用戶不存在,那麼先添加nginx用戶
groupadd nginx
useradd -g nginx nginx

  修改nginx配置文件以支持php-fpm

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.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

/usr/local/php/sbin/php-fpm 
/usr/local/nginx/nginx

  訪問http://你的服務器ip/index.php,皆能夠見到php信息了。

相關文章
相關標籤/搜索