nginx 502 bad gateway問(wèn)題怎么解決

nginx 502 bad gateway問(wèn)題怎么解決

nginx 502 Bad Gateway的含義是請(qǐng)求的PHP-CGI已經(jīng)執(zhí)行,但是由于某種原因(一般是讀取資源的問(wèn)題)沒(méi)有執(zhí)行完畢而導(dǎo)致PHP-CGI進(jìn)程終止,一般來(lái)說(shuō)Nginx 502 Bad Gateway和php-fpm.conf的設(shè)置有關(guān)。

常見(jiàn)的原因可能是php-cgi進(jìn)程數(shù)不夠用、php執(zhí)行時(shí)間長(zhǎng)(mysql慢)、或者是php-cgi進(jìn)程死掉,都會(huì)出現(xiàn)502錯(cuò)誤。

1. 在安裝好的環(huán)境中,運(yùn)行一段時(shí)間出現(xiàn)502問(wèn)題,一般是因?yàn)槟J(rèn)php-cgi進(jìn)程是5個(gè),可能因?yàn)閜hpcgi進(jìn)程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當(dāng)增加。

2. php執(zhí)行超時(shí),修改/usr/local/php/etc/php.ini 將max_execution_time 改為300

3. 磁盤(pán)空間不足,可以使用 # df -h命令查看磁盤(pán)使用量

4. php-cgi進(jìn)程死掉了。

通常的排查方法如下:

1、查看php fastcgi的進(jìn)程數(shù)(max_children值)

#?netstat?-anop?|?grep?php-cgi?|?wc?-l #?netstat?-anpo?|?grep?php-fpm?|?wc?-l

假如顯示是5

2、查看當(dāng)前進(jìn)程

#?ps?aux?|?grep?php-fpm?觀(guān)察fastcgi/php-fpm進(jìn)程數(shù),假如使用的進(jìn)程數(shù)等于或高于5個(gè),說(shuō)明需要增加。

3、調(diào)整/usr/local/php/etc/php-fpm.conf 的相關(guān)設(shè)置

pm.max_children?=?5 request_terminate_timeout?=?60

max_children最多5個(gè)進(jìn)程,按照每個(gè)進(jìn)程20MB內(nèi)存,最多100MB。也就是1分鐘。max_children增多,則php-cgi的進(jìn)程多了就會(huì)處理的很快,排隊(duì)的請(qǐng)求就會(huì)很少。

但是設(shè)置max_children也需要根據(jù)服務(wù)器的性能進(jìn)行設(shè)定,一般來(lái)說(shuō)一臺(tái)服務(wù)器正常情況下每一個(gè)php-cgi所耗費(fèi)的內(nèi)存在20M左右。根據(jù)自己服務(wù)器購(gòu)買(mǎi)的內(nèi)存來(lái)實(shí)際決定。

request_terminate_timeout執(zhí)行的時(shí)間為60秒,request_terminate_timeout值可以根據(jù)服務(wù)器的性能進(jìn)行設(shè)定。一般來(lái)說(shuō)性能越好你可以設(shè)置越高,20分鐘-30分鐘都可以。

4. 部分PHP程序的執(zhí)行時(shí)間超過(guò)了Nginx的等待時(shí)間,可以適當(dāng)增加nginx.conf配置文件中FastCGI的timeout時(shí)間,例如:

http { ...... fastcgi_connect_timeout?300; fastcgi_send_timeout?300; fastcgi_read_timeout?300; ......}

更多Nginx相關(guān)技術(shù)文章,請(qǐng)?jiān)L問(wèn)Nginx教程欄目進(jìn)行學(xué)習(xí)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享