首先簡單的介紹下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 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信息了。