RunCloud 環境下排查 Nginx 502 / 504 Gateway Timeout 錯誤完整教學

runcloud nginx 502 504 gateway

在使用 RunCloud 管理 WordPress 或其他 PHP 應用的伺服器時,Nginx 502 Bad Gateway 及 504 Gateway Timeout 錯誤是最常見的故障之一,這兩種錯誤通常與 Nginx、PHP-FPM 服務異常或後端連線逾時有關。

本教學將以實際指令與步驟,詳細說明在 RunCloud 環境下如何系統性排查 RunCloud Nginx 502 錯誤504 Gateway Timeout,確保伺服器穩定運行。

初步判斷 — 何謂 Nginx 502 與 504 Gateway Timeout 錯誤?

這類錯誤通常出現在使用者透過瀏覽器要求網站時:

  • 502 Bad Gateway:Nginx 作為反向代理,未能正確取得 PHP-FPM 的處理結果,可能為 PHP-FPM 已當機或連線數暴增。
  • 504 Gateway Timeout:Nginx 請求 PHP-FPM 或上游伺服器逾時未獲得回應,可能 PHP 腳本過慢、服務當機等。

Step-by-Step 排查流程

1. 檢查 Nginx 設定是否有誤(nginx-rc -t

RunCloud 使用獨立的 nginx-rc 指令管理服務。執行以下指令可列出所有 Nginx 設定,並檢查語法是否錯誤。

sudo nginx-rc -t

如果出現語法錯誤、未載入重要設定(如 fastcgi_pass 設定錯誤),請立即更正。有誤時會出現類似 invalid directiveunknown directive 等訊息。

2. 檢查 Nginx 與 PHP-FPM 服務狀態(systemctl status

確保 Nginx 及 PHP-FPM 服務都已啟動且無異常:

sudo systemctl status nginx-rc
sudo systemctl status phpXX-fpm

(請依實際 PHP 版本調整 phpXX-fpm,例如:php81-fpm)

如果服務顯示為 inactivefailed,則說明服務當機,此時需嘗試重啟對應服務:

sudo systemctl restart php81-fpm
sudo systemctl restart nginx-rc

3. 查閱錯誤日誌把握關鍵(journalctltail

  • 篩選當機紀錄、異常錯誤訊息:
sudo journalctl -u nginx-rc --since "1 hour ago" --no-pager
sudo journalctl -u php81-fpm --since "1 hour ago" --no-pager

亦可直接檢查 Nginx、PHP 錯誤日誌:

sudo tail -n 50 /var/log/nginx-rc/error.log
sudo tail -n 50 /var/log/php81-fpm.log

根據錯誤訊息(如 upstream prematurely closed connectionconnection refused 等)判斷是 PHP-FPM 當機、資源耗盡還是程式 bug。

4. 確認 PHP-FPM 是否卡住/崩潰(php-fpm 當機排查

  • 觀察 PHP-FPM 活躍進程數及占用情況:
ps aux | grep php-fpm
  • 查看 port 是否被正確監聽 (以 ss 檢查):
sudo ss -ltnp | grep php-fpm
  • 檢查大量進程是否因無法釋放、pm.max_children 達上限,這會造成伺服器吞吐降低,以及 502/504 問題(但本教學不深入 pm.max_children 調整,僅以日誌觀察為主)。

遇到進程暴增、持續僵死請立即嘗試重啟 PHP-FPM,並確認網站是否恢復。

5. 模擬前端請求檢查(curl

使用 curl 指令直接從伺服器測試網站主頁,可確認是全站 502/504,還是部分網頁受影響:

curl -I http://localhost

若仍回應 502/504,表示 Nginx 或 PHP-FPM 問題還未解決;若為 200 OK,則可能是 CDN 或外部網路問題。

排錯建議

  1. 若是 Nginx 或 PHP-FPM 未啟動,請根據 systemctl 錯誤訊息修正設定,再重新啟動。
  2. nginx-rc -T 出現設定錯誤,請回溯最近更動的 Config。
  3. 若日誌顯示資源不足(如 Out of memory, Max children reached),可先重啟服務解除卡死,再分析背後原因(如流量暴增、程式導致 Memory Leak 等)。
  4. 因 504 Gateway Timeout 常見為 PHP 腳本異常或死迴圈,也建議檢查 /var/log/php81-fpm.log 搜尋 Timeout 關鍵字。

常見問題與排除 FAQ

Q1. 重啟服務後仍然 502/504,怎麼辦?
請再次檢查 Nginx 與 PHP-FPM 設定是否相符,例如 fastcgi_pass 指向的 socket/port 是否正確,必要時可嘗試重新部署應用設定。
Q2. 日誌出現 connection refused?
代表 PHP-FPM 服務沒啟動或 Listen 位置不符。請於 nginx-rc 與 PHP-FPM 設定比對。
Q3. 經常性 504 Gateway Timeout?
請檢查 PHP 腳本執行效能、延伸模組、資料庫連線狀態,並考慮查閱 slowlog。

結語

502 Bad Gateway 與 504 Gateway Timeout 是 RunCloud 與 Nginx 伺服器最常見的前端錯誤,只要謹記以上排查步驟,結合 nginx-rc -Tsystemctljournalctltailcurlss 等強力指令,即可迅速定位問題來源,大幅提升服務穩定性。有相關主機管理經驗問題,歡迎在下方留言討論。

Photo by Scott Rodgerson on Unsplash

Please rate Stellar
0 / 5 5 Votes 3

Your page rank: