怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境

這篇文章主要介紹了怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境文章都會有所收獲,下面我們一起來看看吧。

目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設計、古城網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

一、編譯安裝php-fpm

什么是php-fpm

php-fpm是一個php fastcgi管理器,是只用于php的,可以在 http://php-fpm.org/download下載得到.

php-fpm其實是php源代碼的一個補丁,旨在將fastcgi進程管理整合進php包中。必須將它patch到你的php源代碼中,在編譯安裝php后才可以使用。

新版php已經(jīng)集成php-fpm了,不再是第三方的包了,推薦使用。php-fpm提供了更好的php進程管理方式,可以有效控制內(nèi)存和進程、可以平滑重載php配置,比spawn-fcgi具有更多優(yōu)點,所以被php官方收錄了。在./configure的時候帶 –enable-fpm參數(shù)即可開啟php-fpm,其它參數(shù)都是配置php的,具體選項含義可以查看這里。

安裝前準備
centos下執(zhí)行

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://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
./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,安裝后內(nèi)容放在/usr/local/php目錄下

怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境

以上就完成了php-fpm的安裝。

下面是對php-fpm運行用戶進行設置

cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf

修改

user = www-data
group = www-data

如果www-data用戶不存在,那么先添加www-data用戶

groupadd www-data
useradd -g www-data www-data

二、編譯安裝nginx

然后按照http://www.nginx.cn/install 安裝nginx

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

nginx安裝完成后,修改nginx配置文件為,nginx.conf

其中server段增加如下配置,注意標紅內(nèi)容配置,否則會出現(xiàn)no input file specified.錯誤

# 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;
}

四、創(chuàng)建測試php文件

創(chuàng)建php文件

在/usr/local/nginx/html下創(chuàng)建index.php文件,輸入如下內(nèi)容

<?php
  echo phpinfo();
?>

五、啟動服務

啟動php-fpm和nginx

/usr/local/php/sbin/php-fpm 
#手動打補丁的啟動方式/usr/local/php/sbin/php-fpm start

sudo /usr/local/nginx/nginx

php-fpm關(guān)閉重啟見文章結(jié)尾

六、瀏覽器訪問

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

怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境

七、錯誤解決
在使用nginx時,經(jīng)常會碰到502 bad gateway和504 gateway time-out錯誤,下面以nginx+php-fpm來分析下這兩種常見錯誤的原因和解決方案。

1.502 bad gateway錯誤

在php.ini和php-fpm.conf中分別有這樣兩個配置項:max_execution_time和request_terminate_timeout。
這兩項都是用來配置一個php腳本的最大執(zhí)行時間的。當超過這個時間時,php-fpm不只會終止腳本的執(zhí)行,
還會終止執(zhí)行腳本的worker進程。所以nginx會發(fā)現(xiàn)與自己通信的連接斷掉了,就會返回給客戶端502錯誤。

以php-fpm的request_terminate_timeout=30秒時為例,報502 bad gateway錯誤的具體信息如下:
1)nginx錯誤訪問日志:

   2013/09/19 01:09:00 [error] 27600#0: *78887 recv() failed (104: connection reset by peer) while reading response header from upstream, 
   client: 192.168.1.101, server: test.com, request: "post /index.php http/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", 
   host: "test.com", referrer: "http://test.com/index.php"

2)php-fpm報錯日志:

   warning: child 25708 exited on signal 15 (sigterm) after 21008.883410 seconds from start

所以只需將這兩項的值調(diào)大一些就可以讓php腳本不會因為執(zhí)行時間長而被終止了。request_terminate_timeout可以覆蓋max_execution_time,
所以如果不想改全局的php.ini,那只改php-fpm的配置就可以了。

此外要注意的是nginx的upstream模塊中的max_fail和fail_timeout兩項。有時nginx與上游服務器(如tomcat、fastcgi)的通信只是偶然斷掉了,
但max_fail如果設置的比較小的話,那么在接下來的fail_timeout時間內(nèi),nginx都會認為上游服務器掛掉了,都會返回502錯誤。
所以可以將max_fail調(diào)大一些,將fail_timeout調(diào)小一些。

2.504 gateway time-out錯誤

php-fpm設置的腳本最大執(zhí)行時間已經(jīng)夠長了,但執(zhí)行耗時php腳本時,發(fā)現(xiàn)nginx報錯從502變?yōu)?04了。這是為什么呢?
因為我們修改的只是php的配置,nginx中也有關(guān)于與上游服務器通信超時時間的配置factcgi_connect/read/send_timeout。

以nginx超時時間為90秒,php-fpm超時時間為300秒為例,報504 gateway timeout錯誤時的nginx錯誤訪問日志如下:

   2013/09/19 00:55:51 [error] 27600#0: *78877 upstream timed out (110: connection timed out) while reading response header from upstream, 
   client: 192.168.1.101, server: test.com, request: "post /index.php http/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", 
   host: "test.com", referrer: "http://test.com/index.php"

調(diào)高這三項的值(主要是read和send兩項,默認不配置的話nginx會將超時時間設為60秒)之后,504錯誤也解決了。
而且這三項配置可以配置在http、server級別,也可以配置在location級別。擔心影響其他應用的話,就配置在自己應用的location中吧。
要注意的是factcgi_connect/read/send_timeout是對fastcgi生效的,而proxy_connect/read/send_timeout是對proxy_pass生效的。

配置舉例:

location ~ \.php$ {
        root          /home/cdai/test.com;
        include         fastcgi_params;
        fastcgi_connect_timeout   180;
        fastcgi_read_timeout      600;
        fastcgi_send_timeout      600;
        fastcgi_pass      unix:/dev/shm/php-fcgi.sock;
        fastcgi_index      index.php;
        fastcgi_param     script_filename /home/cdai/test.com$fastcgi_script_name;
   }

關(guān)于“怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境”知識都有一定的了解,大家如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前文章:怎么用php-fpm搭建Nginx+PHP的生產(chǎn)環(huán)境
當前URL:http://muchs.cn/article44/pisshe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、品牌網(wǎng)站設計、面包屑導航、網(wǎng)站內(nèi)鏈App開發(fā)、標簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計