首先是更改php-fpm的幾處配置:
/www/wdlinux/php/etc/php-fpm.conf
/www/wdlinux/etc/php-fpm.conf 把max_children由之前的10改為現在的30,這樣就可以保證 有充足的php-cgi進程可以被使用;
把request_terminate_timeout由之前的0s改為60s,這樣php-cgi進程 處理腳本的超時時間就是60秒,可以防止進程都被掛起,提高利用效率。
打開 /usr/local/php/etc/php-fpm.conf
調大以下兩個參數(根據服務器實際情況,過大也不行)
5120
600
504 timeout
send_timeout 60;
fastcgi_buffers 8 128k;
在/www/wdlinux/nginx/conf/nginx.conf
裡增加和調整下這兩個參數試試,附其它解決方法
一、fastcgi緩沖區設置過小
出現錯誤,首先要查找nginx的日志文件,目錄為/var/log/nginx,在日志中發現了如下錯誤。
2013/01/17 13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream
查閱了一下資料,大意是nginx緩沖區有一個bug造成的,我們網站的頁面消耗占用緩沖區可能過大。
網上查找了一下解決方法,在國外網站看到了一個增加緩沖區的方法,徹底解決了Nginx 502 Bad Gateway的問題。方法如下:
http {
...
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
...
}
請根據服務器已經網站的情況自行增大上述兩個配置項。
二、代理緩沖區設置過小
如果你使用的是nginx反向代理,如果header過大,超出了默認的1k,就會引發上述的upstream sent too big header (說白了就是nginx把外部請求給後端處理,後端返回的header太大,nginx處理不過來就會導致502。
server {
listen 80;
server_name *.lxy.me;
location / {
###############添加這3行
proxy_buffer_size 64k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
###############添加這3行
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
............
}
三、默認php-cgi的進程數設置過少
在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。也有可能是max_requests值不夠用。需要說明的是這連個配置項占用內存很大,請根據服務器配置進行設置。否則可能起到反效果。
四、php執行超時 www.111cn.net
php執行超時,修改/usr/local/php/etc/php.ini 將max_execution_time 改為300
五、nginx等待時間超時
部分PHP程序的執行時間超過了Nginx的等待時間,可以適當增加nginx.conf配置文件中FastCGI的timeout時間
http {
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
......
}