nginx502與504

502與504釋義:

502 bad gateway 顧名思義 網關錯誤 後端服務器tomcat或php沒有起來,應用服務的問題(前提是接入層7層正常的情況下)。

應用服務問題一種是應用本身問題;另一種是因爲依賴服務問題比如依賴服務RT高,依賴的服務有大的讀取(mysql慢查,http等),以至於調用方超過超時read時間;服務集羣壓力大時,也會出現502超時(502理解爲不可響應或響應不過來,其實還是不可響應)。

504 gateway time-out 顧名思義 網關超時 一般計算機中的超時就是配置錯了,此處一般指nginx做反向代理服務器時,所連接的服務器tomcat無響應導致的。

從網絡角度,502已經與後端建立了連接,但超時;504與後端連接未建立,超時。

5打頭的http回覆碼錶示服務端出了問題,php-cgi進程數不夠用、php執行時間長、或者是php-cgi進程死掉,都會出現502錯誤,有可能是nginx的問題,也可能是後端php的問題

排查思路:

1、必現502,應用“掛了”
2、偶現502,資源不足,mysql連不上,等等,大都是資源不足的問題

排查邏輯:

Nginx通過配置fastcgi模塊來提供對php支持

Nginx的問題:

  1. 可能php的執行時間比較長,超過了nginx的等待時間,把nginx默認的等待時間調長

fastcgi_connect_timeout 300;(默認60,不能超過75)

fastcgi_send_timeout 300; (默認60)

fastcgi_read_timeout 300; (默認60)

phpfpm的問題:/usr/local/php/etc/php-fpm.conf:

1.    php有沒有啓動

  1. 2.      可以查看FastCGI進程數的配置與實際grep php-cgi出的進程數,相近的話,可以將FastCGI的進程數量調大

修改php配置文件中pm.max_children 默認10,改成30

  1. 3.      或者修改php配置文件中pm.max_requests的值,它表示每個CGI進程可以響應的請求數。
  2. 嘗試增大php緩存區的大小,因爲它默認是8k,可以改成128k

fastcgi_buffers 8 128k

補充:   如果nginx訪問量突然增大的話,也會出現504的錯誤,因爲nginx每秒迴應的請求是有限制的,如果超過的話,只會對部分請求做出回覆,這個可以過濾nginx日誌中ip的請求數來判斷是否被攻擊。

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