Nginx 502 Bad Gateway 錯誤、解決方案和監控

Nginx 502 Bad Gateway 是因爲nginx因爲內存不足,PHP反應緩慢,php進程不足等引起的一類服務器錯誤。

發送問題的原因:
1、PHP FastCGI進程數不夠用


當網站併發訪問巨大時,php fastcgi的進程數不有一定的保障,因爲cgi是單線程多進程工作的,也就是說cgi需要處理完一個頁面後再繼續下一個頁面。如果進程數不夠,當訪問巨大的時候,cgi按排隊處理之前的請求,之後的請求只有被放棄。這個時候nginx就會不時的出現502錯誤。

2、PHP FastCGI的內存不夠用


當nginx返回靜態頁面時,這個問題一般不會出現,因爲nginx不需要php cgi的處理而直接返回靜態頁面。但是當網頁需要處理大量的php複雜操作的時候,例如執行api採集,或者採集頁面的時候,那對php的要求是相當高的,如果配置給他的內存太少,那很容易就會導致php崩潰。

解決方法:
1、請檢查你的FastCGI進程是否啓動


2、FastCGI進程不夠使用


請通過執行 netstat -anpo | grep "php-cgi" | wc -l 判斷,是否接近你啓動的FastCGI進程,接近你的設置,表示進程不夠。

3、執行超時


可以把 nginx.conf 這幾項的值調大一些:

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;4、FastCGI緩衝不夠


nginx和apache一樣,有前端緩衝限制,可以把 nginx.conf 這幾項的值調大一些:

fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
5、Proxy緩衝不夠


如果你使用了Proxying,可以把 nginx.conf 這幾項的值調大一些:

proxy_buffer_size 16k;
proxy_buffers 4 16k;
6、https轉發配置錯誤


正確的配置方法

server_name www.mydomain.com;

location /myproj/repos {

set $fixed_destination $http_destination;
if ( $http_destination ~* ^https(.*)$ )
{
set $fixed_destination http$1;
}

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Destination $fixed_destination;
proxy_pass http://subversion_hosts;
}
7、php腳本執行時間過長


將 php-fpm.conf 的 <value name="request_terminate_timeout">0s</value> 的 0s 改成一個時間。
監控腳本
當發生 Nginx 502 Bad Gateway 錯誤問題時候重啓 PHP-FPM進程,併發送郵件通知管理員:

#!/bin/bash

STATE=`curl --head http://www.linuxde.net | awk 'NR==1' | awk '{print $2}'`

if [ "$STATE" -eq "502" ]; then
    /bin/bash /usr/local/webserver/php/sbin/php-fpm reload
    /bin/bash /usr/local/webserver/nginx/sbin/nginx -s reload
     echo "[報警]" "http error 502" $(date +"%y-%m-%d %H:%M:%S") "Reload php-fpm And Nginx" | mail -s "ERROR" [email protected]
elif [ "$STATE" -ne "502" ] && [ "$STATE" -ne "200" ]; then
    echo "[報警]" "Web Server Stop Working" $(date +"%y-%m-%d %H:%M:%S") | mail -s "ERROR" [email protected]
fi
定時執行腳本,這裏是30分鐘執行一次,可以根據情況而定

vim /etc/crontab

*/30 * * * * root /root/satools/reload_php-fpm_error.sh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章