502 Bad Gateway
502 代表什麼、和 503、504 差在哪裡,以及當你自己的伺服器回 502 時該檢查什麼。
在你的瀏覽器中執行
點一下代碼即可複製。
5xx · 伺服器錯誤
請求本身沒有問題,是伺服器沒能處理好。
| 代碼 | 意義 |
|---|---|
| Internal Server Error | 出了問題,而伺服器說不出更具體的原因。 |
| Not Implemented | 伺服器根本不支援這個要求。 |
| Bad Gateway | 代理伺服器向上游詢問,卻拿到一個無法使用的回應。上游有回應,只是回得不對。504 是上游沒有在時限內回應,503 則是這台伺服器自己決定不處理。 |
| Service Unavailable | 暫時不提供服務,可能是超載或正在維護。 |
| Gateway Timeout | 代理伺服器等待上游回應,最後放棄了。 |
沒有符合的狀態碼。
中間那台機器拿到了一個壞答案
502 來自一台不是原本該回答你的機器。某個代理伺服器、負載平衡器或 CDN 把你的請求往上游 送,收到了回應,卻看不懂那是什麼。
所以 502 從來就不是在講你問的那台伺服器,而是在講它後面兩台機器之間的對話——這正是為什麼 它從外面完全看不出原因,在日誌裡卻一目了然。
502、503、504 是三種不同的失敗
| 代碼 | 發生了什麼 |
|---|---|
| 502 | 上游回了但回得不對——格式錯誤,或連線在回應中途斷掉 |
| 503 | 這台伺服器自己決定不處理——超載,或正在維護 |
| 504 | 上游沒有在時限內回應 |
在你自己的服務裡把這三個用對,比想像中重要:帶著 Retry-After 標頭的 503 能明確告訴用戶端
什麼時候可以再來,而 502 什麼有用的資訊都沒給。
如果是別人的網站出現 502
你能做的很少,而且幾乎絕不是你這端的問題。過一分鐘再重新整理。如果換網路、換裝置都還是這樣, 那就是他們的問題。
有一件事值得排除一次:你自己這邊過期的快取轉址,或是公司的代理伺服器,也可能產生一個只有你 看得到的 502。
如果是你自己的伺服器在回 502
常見原因大致依序如下:
- 代理後面的應用程式沒有在跑,或崩潰後沒有重啟。先檢查行程,其他都放在後面。
- 它在監聽別的地方——連接埠不對,或綁在
127.0.0.1而代理預期的是0.0.0.0,這在 容器環境裡極為常見。 - **它在回應到一半時死掉。**回應大量資料時被 OOM 殺掉,產生的是 502 而不是 500,因為代理 看到的是一個被截斷的答案。
- **逾時設定不一致。**如果代理的逾時比應用程式短,緩慢的請求就會在高負載時變成 502 或 504, 而且在測試環境永遠重現不出來。
- **標頭太大。**過大的 cookie 或
Authorization標頭可能超過代理的緩衝區,回應就被判定為 格式錯誤而遭拒。
在這種情況下,應用程式的日誌幾乎總是比代理的日誌更有用。代理只知道那個答案不能用,應用程式 才知道為什麼。