在ECS實(shí)例內(nèi)訪問網(wǎng)站提示“Nginx 502 bad gateway”錯(cuò)誤如何處理?
本文介紹在ECS實(shí)例上使用瀏覽器訪問網(wǎng)站時(shí),提示“Nginx 502 Bad Gateway”錯(cuò)誤的問題原因和解決方案。
問題原因
“Nginx 502 Bad Gateway”錯(cuò)誤表示訪問請(qǐng)求的php-cgi進(jìn)程已經(jīng)開始執(zhí)行,但是由于讀取資源失敗等原因沒有執(zhí)行完畢,導(dǎo)致php-cgi進(jìn)程終止。
常見的問題原因如下:
解決方案
您可以參考如下操作進(jìn)行逐一排查。
本文中/usr/local/php/etc/php-fpm.conf
、/usr/local/php/etc/php.ini
、/etc/nginx.conf
等配置文件需要根據(jù)安裝環(huán)境不同來更換路徑,請(qǐng)以您的實(shí)際部署安裝的軟件路徑為準(zhǔn)。
磁盤空間不足
如果訪問網(wǎng)站時(shí),直接提示“Nginx 502 Bad Gateway”錯(cuò)誤,可能是ECS實(shí)例的磁盤空間不足導(dǎo)致。您需要執(zhí)行如下步驟進(jìn)行排查:
遠(yuǎn)程登錄ECS實(shí)例。
具體操作,請(qǐng)參見連接方式概述。
執(zhí)行
df -h
命令,查看是否磁盤空間是否充足。如果磁盤空間充足,則該問題不是由于磁盤空間問題導(dǎo)致。
如果磁盤空間不足,則您需要擴(kuò)容云盤,具體操作,請(qǐng)參見云盤擴(kuò)容指引。
php-cgi進(jìn)程數(shù)不夠用
如果在已安裝Nginx且可以正常訪問網(wǎng)站的環(huán)境中,運(yùn)行一段時(shí)間才后出現(xiàn)“Nginx 502 Bad Gateway”錯(cuò)誤,則可能是php-cgi進(jìn)程數(shù)不夠用導(dǎo)致。
此時(shí),您需要修改/usr/local/php/etc/php-fpm.conf
配置文件,將文件中pm.max_children
參數(shù)的值調(diào)高,即增加php-cgi進(jìn)程數(shù)。
PHP執(zhí)行超時(shí)
如果訪問網(wǎng)站時(shí),直接提示“Nginx 502 Bad Gateway”錯(cuò)誤,可能是PHP執(zhí)行超時(shí)導(dǎo)致。
此時(shí),您需要修改/usr/local/php/etc/php.ini
配置文件,將文件中max_execution_time
參數(shù)的值改為300
。如下圖所示,您需要將該參數(shù)的值從30
修改為300
。
php-cgi進(jìn)程異常中斷
如果訪問網(wǎng)站時(shí),直接提示“Nginx 502 Bad Gateway”錯(cuò)誤,可能是php-cgi進(jìn)程異常中斷導(dǎo)致。您需要執(zhí)行如下步驟進(jìn)行法排查:
遠(yuǎn)程登錄ECS實(shí)例。
具體操作,請(qǐng)參見連接方式概述。
依次執(zhí)行如下命令,查看php fastcgi的進(jìn)程數(shù)和
pm.max_children
參數(shù)的值。netstat -anop | grep php-cgi | wc -l netstat -anpo | grep php-fpm | wc -l
執(zhí)行如下命令,查看當(dāng)前進(jìn)程。
ps aux | grep php-fpm
回顯示例如下,查看fastcgi、php-fpm的進(jìn)程數(shù)。如果進(jìn)程數(shù)大于或等于5個(gè),則表示需要增加進(jìn)程數(shù)。
修改
/usr/local/php/etc/php-fpm.conf
配置文件中的相關(guān)參數(shù)。將
pm.max_children
參數(shù)的值修改為5
,表示支持5個(gè)進(jìn)程。說明pm.max_children
最多支持設(shè)置5個(gè)進(jìn)程。按照每個(gè)進(jìn)程20 MB內(nèi)存,最多支持100 MB,即資源消耗時(shí)間為1分鐘。如果pm.max_children
增多,則php-cgi的進(jìn)程增多,進(jìn)程處理速度就會(huì)加快、排隊(duì)的請(qǐng)求就會(huì)變少。但是設(shè)置pm.max_children
也需要根據(jù)服務(wù)器的性能進(jìn)行設(shè)定,一臺(tái)服務(wù)器正常情況下,每一個(gè)php-cgi進(jìn)程所耗費(fèi)的內(nèi)存在20 MB左右,您需要根據(jù)實(shí)際購買的服務(wù)器內(nèi)存來決定pm.max_children
的值。將
request_terminate_timeout
參數(shù)的值修改為60
,表示內(nèi)存回收機(jī)制為1分鐘(60秒)。說明request_terminate_timeout
的值可以根據(jù)服務(wù)器的性能進(jìn)行設(shè)定,常見設(shè)置為60秒。通常服務(wù)器性能越好,您可以設(shè)置的值越高。
如果PHP進(jìn)程的執(zhí)行時(shí)間超過了Nginx的等待時(shí)間,則您需要適當(dāng)增加Nginx的
/etc/nginx.conf
配置文件中fastcgi_connect_timeout
,fastcgi_send_timeout
和fastcgi_read_timeout
參數(shù)的timeout
時(shí)間,您需要修改的參數(shù)如下: