访问线上平台出现http状态码“502”和“504”
某一天在訪問線上平臺的時候,突然發(fā)現(xiàn)進(jìn)不去了,加載了好大一會先是出現(xiàn)“502 Bad Gateway”(網(wǎng)關(guān)錯誤), 過了一會再去訪問出現(xiàn)“504 Gateway Time-out”(網(wǎng)關(guān)超時),現(xiàn)在就這兩個狀態(tài)出現(xiàn)的原因和解決辦法進(jìn)行分析。
一、出現(xiàn)“502”
網(wǎng)頁顯示:
原因:(以下都有可能,原因并不唯一)
1. upstream連接失敗,可能后端服務(wù)沒有開啟,屬于應(yīng)用服務(wù)的問題(前提是接入層7層正常的情況下)。
 2. SSL初始化或者握手失敗,可能證書不正確
 3. 發(fā)送請求時,和upstream的連接已經(jīng)斷掉
 4. 從upstream中recv數(shù)據(jù)失敗或者長度為0或者eof
 5. upstream中recv的數(shù)據(jù)太大或者不是有效的HTTP header
上面的話可能一般人不理解,其中某位博主給的解釋很好理解也比較準(zhǔn)確:“后端服務(wù)器tomcat沒有起來,應(yīng)用服務(wù)的問題(前提是接入層7層正常的情況下)。
應(yīng)用服務(wù)問題一種是應(yīng)用本身問題;另一種是因為依賴服務(wù)問題比如依賴服務(wù)RT高,依賴的服務(wù)有大的讀取(mysql慢查,http等),以至于調(diào)用方超過超時read時間;服務(wù)集群壓力大時,也會出現(xiàn)502超時(502理解為不可響應(yīng)或響應(yīng)不過來,其實(shí)還是不可響應(yīng))。”雖然和后端服務(wù)建立聯(lián)系,但是無法給予正常的響應(yīng),因此報錯。
解決辦法:
1.加大后端服務(wù)單個業(yè)務(wù)請求的執(zhí)行的時間,具體是后端擴(kuò)容或者前端限流?
場景可能是:使用者在查詢數(shù)據(jù)時,本來后端跟前端是做大查詢的條數(shù)是10萬條,可是使用者不知道,直接查了近三年的數(shù)據(jù),足足有1億多條,服務(wù)分分鐘就掛了
2.后端適當(dāng)將php-cgi進(jìn)程數(shù)設(shè)置多點(diǎn),需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當(dāng)增加。
3.增大緩沖區(qū)
fastcgi_buffers 8 16k; fastcgi_buffer_size 32k;4.增大代理緩沖區(qū)
5.增加php超時時間,php.ini 中缺省的最長執(zhí)行時間是 30 秒,即使morenmax_execution_time=30,適當(dāng)增大這一數(shù)值
6.增加nginx等待時間:
http{...fastcgi_connect_timeout 300;//連接fastcgi_send_timeout 300;//發(fā)送請求fastcgi_read_timeout 300;//發(fā)送輸出... }7.后端查看并處理死掉的進(jìn)程
二、出現(xiàn)“504”
網(wǎng)頁顯示:
原因:
大佬解釋:
“504 gateway time-out 顧名思義 網(wǎng)關(guān)超時 一般計算機(jī)中的超時就是配置錯了,此處一般指nginx做反向代理服務(wù)器時,所連接的服務(wù)器tomcat無響應(yīng)導(dǎo)致的。
從網(wǎng)絡(luò)角度,502已經(jīng)與后端建立了連接,但超時;504與后端連接未建立,超時。”?服務(wù)器作為網(wǎng)關(guān)或代理,但是沒有及時從上游服務(wù)器收到請求。上游服務(wù)器已關(guān)閉,也就是不響應(yīng)網(wǎng)關(guān)或者代理
解決辦法:
1.nginx中配置:
(1) 增大以下超時時間的值。默認(rèn)都是60s。
http{...fastcgi_connect_timeout 300;//連接fastcgi_send_timeout 300;//發(fā)送請求fastcgi_read_timeout 300;//發(fā)送輸出... }(2) 優(yōu)化性能參數(shù)設(shè)置,適當(dāng)將fastcgi以下參數(shù)變大:
http {...fastcgi_buffer_size=128k;fastcgi_buffers 2 256k;fastcgi_busy_buffers_size 256k;fastcgi_temp_file_write_size 256k;... }2.php中配置:
(1)php.ini
設(shè)置max_execution_time值
(2)php-fpm
通過計算適當(dāng)增大max_children(php-cgi最大進(jìn)程數(shù))、request_terminate_timeout(處理腳本的超時時間)的值,
注意:以下的值并不是通用的,需要計算(計算詳情請點(diǎn)擊)
max_children 40 request_terminate_timeout 900三、常見的HTTP協(xié)議以及http狀態(tài)碼:
HTTP協(xié)議
參考:
【1】前端報502 bad gateway的原因及解決方案
【2】http 502 和 504 的區(qū)別
【3】http狀態(tài)碼502與504區(qū)別
【4】如何解決“504 Gateway Time-out”錯誤
【5】Ngnix中的fastcgi參數(shù)性能優(yōu)化和解釋
總結(jié)
以上是生活随笔為你收集整理的访问线上平台出现http状态码“502”和“504”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: C++的字符串分割函数
 - 下一篇: 【软件开发底层知识修炼】六 Binuti