首頁/網路小學堂
2026.02.12

504 錯誤怎麼辦?一次搞懂 504 Gateway Timeout 原因與解決方法

當網站流量衝高導致伺服器過載,網頁顯示 504 Gateway Timeout 錯誤訊息的示意圖。

你有沒有遇過這種情況,活動剛上線、廣告剛開跑、流量正衝高,畫面卻突然整片白底黑字:

504 Gateway Timeout

那種崩潰感真的會讓人血壓飆升。

其實 504 通常不是「網站壞掉」,而是「等太久等不到回應」。
尤其在高峰期,當流量暴增、第三方服務延遲、資料庫查詢變慢時,就很容易出現 504 Gateway Timeout。

這篇文章會帶你:

  • 搞懂 504 是什麼

  • 一步步定位是哪一層出問題

  • 建立排障 SOP,避免下次再當無頭蒼蠅

如果你是網頁新手,或最近正被 504 搞到懷疑人生,這篇會很實用,記得收藏唷!
 

504 是什麼?用白話搞懂 504 Gateway Timeout

504 Gateway Timeout 定義解析圖:說明 CDN 或代理伺服器(Proxy)在規定時間內等不到後端 App Server 回應的運作原理。
 

504 Gateway Timeout 是一種 HTTP 狀態碼。

意思是:

「網關(Gateway)或代理伺服器,在規定時間內,等不到上游伺服器回應。」

簡單說明請求流程:

使用者 → CDN / 反向代理 → 應用伺服器 → 資料庫

504 發生的位置,通常是「中間那層」在等待「後端」,但後端遲遲沒有回應。

 

504 常見原因有哪些?最容易踩到的 7 種情境一次看

當你看到 504 Gateway Timeout,先不要急著怪主機商。
多數時候,它其實是在告訴你:「後端某一段卡住了。」

導致 504 Gateway Timeout 的七大原因清單:包含伺服器處理慢、資料庫慢查詢、外部 API 卡死及 DNS 異常等。

以下是最常見導致 504 的幾種原因:
 

上游伺服器處理太慢(最常見)

這是 504 的頭號兇手。

所謂「上游伺服器」,指的是在 CDN 或反向代理後面的應用伺服器。
如果它處理請求太慢(例如超過 30 秒),前面的網關等不到回應,就會直接回傳 504。

常見原因包括:

  • 流量突然暴增

  • 伺服器 CPU 滿載

  • 程式進入無限迴圈

  • I/O 操作卡住

愛立歐小提醒:
簡單來說,就是「車子塞住了」,前面的人等太久,只好宣布逾時。

 

資料庫慢查詢或鎖表

很多 504 問題,其實根本不是網站壞掉,而是資料庫在拖後腿。

例如:

  • 沒加索引的大型查詢

  • 一次撈幾十萬筆資料

  • 資料表被鎖住

  • 連線池滿了

當資料庫回應變慢,應用程式就會卡住,最後導致 504。

愛立歐小提醒:
這種情況在高峰期特別容易發生唷!

 

應用程式執行緒耗盡

每個應用程式都有「處理名額」。

如果同時間太多人進來:

  • 執行緒池滿了

  • 佇列堆積

  • worker 不夠

新的請求就只能排隊。
排太久,前面的代理層等不到,就出現 504。

愛立歐小提醒:
這種問題常見於沒有做流量控管的網站。

 

外部 API 回應卡死

現在很多網站都依賴第三方服務:

  • 金流

  • 物流

  • 驗證 API

  • 外部資料接口

如果第三方 API 變慢或沒有回應,而你的系統又沒有設計「降級機制」,整個請求就會被拖住。

結果不是 API 壞,而是你的網站跟著一起被拖垮。
這也是 504 的隱形地雷之一。

 

DNS 解析異常

有時候問題根本不在程式,而是在「找不到人」。

例如:

  • DNS 解析錯誤

  • TTL 設定不當

  • 解析到舊 IP

  • 跨區延遲過高

當代理層找不到正確的上游 IP,自然也等不到回應。

愛立歐小提醒:
這種問題常發生在搬主機或切流量時。

 

網路延遲或跨區問題

如果:

  • 伺服器在國外

  • CDN 節點距離太遠

  • 跨區傳輸延遲

  • 封包丟失

都可能造成回應時間拉長。

愛立歐小提醒:
特別是多區架構或雲端跨區部署時,更要留意這點。

 

逾時(timeout)設定不一致

這是很多新手最容易忽略的問題。

假設:

  • CDN timeout 設 30 秒

  • Nginx 設 60 秒

  • App 設 90 秒

  • 資料庫設 120 秒

那 30 秒就會先炸掉。

不是系統真的壞,而是前面等不及了。

愛立歐小提醒:
逾時值一定要「全鏈路對齊」,這是避免 504 的基本功。

 

504 怎麼排查?新手也能照做的分層定位流程

快速判斷:先區分哪一段超時

你可以把網站想成「接力賽」:
使用者的請求會一路從 邊緣層 → 應用層 → 資料層 → 外部依賴 跑完一圈,任何一段跑太慢,前面的人等不及,就回傳 504。

 

邊緣層(CDN / WAF / Nginx):先看「門口」是不是卡住

邊緣層就是最靠近使用者的那一層,通常包含 CDN、WAF、防火牆、反向代理(例如 Nginx)。

這層出問題的特徵是:
你甚至還沒打到後端,前面就先說「我等不到」了。

你可以先檢查:

  • 查看 CDN 日誌 / 防火牆事件:是否被擋、是否回應逾時

  • 檢查 proxy timeout 設定:例如 proxy_read_timeout、proxy_connect_timeout

  • 確認邊緣節點是否負載過高:高峰期特別容易發生(尤其活動、廣告剛開跑時)

愛立歐小提醒:
如果你用 Cloudflare 這類 CDN,很多時候錯誤其實會先出現在 CDN 的日誌或事件紀錄裡,別直接跳去看資料庫,會白忙一場。

 

應用層(App Server):看「後端是不是忙到爆」

如果邊緣層沒問題,那下一步通常就是應用層(你的網站程式、API、後台服務)。

這層出問題的特徵是:
可以連到後端,但後端處理變超慢,慢到前面那層等不下去。

新手可以先看這三個重點:

  • APM 是否顯示 p95 / p99 延遲暴增?
    代表大多數使用者還好,但「一部分請求」卡住(通常是某些功能或某些頁面特別慢)

  • Thread pool 是否耗盡?
    很多框架都有執行緒池,如果池子滿了,新請求只能排隊,排到超時就 504

  • GC 是否頻繁?(Java / JVM 特別常見)
    GC 變頻繁常意味記憶體壓力大,會造成整體回應抖動、延遲突然飆高

如果你看到「延遲突然拉高 + 錯誤率增加」,通常就是應用層塞車了。

 

資料層(Database):最常被低估的「隱形拖油瓶」

很多 504 的根本原因,其實躲在資料庫裡。

資料庫一慢,後端就會等它,後端一等,反向代理就開始倒數計時,最後變成 504。

你要檢查的重點是:

  • 是否出現慢查詢?(Slow Query Log)

  • 是否鎖表?(Lock / Deadlock)

  • 連線池是否滿載? 連線池滿載通常會讓請求「卡在等連線」,不是你程式壞,是你根本拿不到資料庫門票

愛立歐小提醒:
如果 504 只發生在「特定頁面/特定功能」,非常高機率是那條路徑的 SQL 查詢在拖時間。

 

外部依賴:第三方 API 一慢,你網站就跟著一起慢

現在很多網站都不是自己一個人跑完流程,還會依賴第三方服務:

  • 金流

  • 物流

  • 簡訊 / 驗證

  • 外部資料 API

外部依賴的問題是:
不是你能控制的,但你必須有能力「承受它變慢」。

你可以檢查:

  • 第三方 API 是否延遲?(對照你自己的請求時間)

  • 是否沒有設計 retry 或熔斷?
    沒有保護機制時,一旦外部卡住,你的 thread / connection 也會跟著被卡住,最後拖垮整個系統

這也是很多網站高峰期爆 504 的原因:不是你流量太大,是「第三方剛好也在塞車」。

 

最小可行排障流程(SOP)

如果你希望「有一套照做就不會走偏」的流程,下面這套是實務上很常用的 504 排查 SOP。

 

先穩定服務(先止血,別硬扛)

解決 504 錯誤的緊急處理 SOP 流程圖:包含開啟靜態快取、降級非關鍵功能、切換備援節點與擴容 CPU/RAM。

當下最重要的是:先讓使用者不要一直撞牆。

你可以做的快速止血手段包括:

  • 開啟快取頁面:讓熱門頁先用快取撐住

  • 降級非關鍵功能:例如暫停推薦系統、關閉非必要 API 呼叫

  • 切換到備援節點:如果有多台或多區,先切流量

  • 擴容實例:短期先把 CPU/RAM/節點數撐起來

愛立歐小提醒:
止血不是作弊,是爭取時間。很多事故就是一開始沒止血,後面越修越炸。

 

看關鍵指標(用數據決定你要查哪裡)

新手最常犯的錯是「沒看數據就開始改設定」。
建議你先看這幾個指標,快速判斷瓶頸在哪:

  • p95 / p99 延遲(是不是突然暴增)

  • 錯誤率(是特定路徑爆?還是全面爆)

  • 連線數(有沒有爆量)

  • Queue 長度(請求是不是在排隊)

  • CPU / RAM 使用率(是不是滿載)

看到「延遲暴增 + Queue 變長」通常就代表後端塞車了。

 

查日誌順序(照順序,別跳著看)

建議順序:

CDN / Nginx → 應用程式 Trace → 資料庫慢查詢 Log

這個順序的好處是:你會先確認「請求到底卡在哪一段」,再往裡面鑽。

真的不要跳著看,會超浪費時間,還可能誤判唷。

 

對齊逾時值(很多 504 其實是「設定打架」)

網站全鏈路 Timeout 設定優化教學:正確原則為越外層(CDN)的逾時時間應比內層(DB/App)更長。
 

504 常見地雷是 timeout 設定不一致,例如:

  • CDN timeout 60 秒

  • Nginx timeout 30 秒

  • App timeout 90 秒

 

結果會變成:
代理層 30 秒就先斷線 → 直接回 504
即使後端 40 秒其實就會成功回來,也來不及了。

所以你要記得:timeout 必須全鏈路對齊(CDN / 代理 / App / DB / 外部 API),才不會某一段先斷。

 

加保護機制(把「一次事故」變成「可控風險」)

要讓 504 不再一直找上門,最後一定要做保護機制:

  • 重試(Retry + 指數退避):不要一秒狂打 10 次,會更炸

  • 熔斷(Circuit Breaker):第三方掛了就先暫停呼叫,避免拖垮自己

  • 隔離資源池:把「關鍵路徑」跟「非關鍵路徑」分開,不要互相拖累

這些才是把 504 從根本變少的關鍵。

 

504 元兇對照表:Nginx、App、DB、外部 API 該怎麼解

Nginx upstream 逾時

Nginx 是站在前線的「守門員」。
如果後端(upstream)回應太慢,Nginx 等到 timeout 就會直接回 504。

常見原因

  • proxy timeout 設太短

  • upstream 節點數量不足

  • 後端伺服器卡住

  • 沒設健康檢查導致流量打到壞節點

 

如何解決

調整 timeout 設定

proxy_read_timeout 120s;
keepalive_timeout 65;

愛立歐小提醒:
拉長 timeout 只是緩衝,不是根治。
 

增加 upstream 節點

如果只有一台 App Server,流量一大就爆。
增加 upstream 節點可以分流壓力。
 

加入健康檢查

壞掉的節點要自動被排除。
否則流量會一直打到已經卡死的後端。

 

App 卡 I/O 或 CPU

應用層最常見的問題是:

  • 同步處理太多事情

  • I/O 阻塞

  • CPU 滿載

  • worker 不夠

當應用層塞車,前面那層自然就等到 timeout。

如何解決
 

非同步處理

把耗時操作改成 async,避免主流程被卡住。
 

批次化處理

不要一筆一筆慢慢跑。
例如報表或資料更新,可以改成批次排程。
 

壓縮回應

大型 JSON 回應沒壓縮會拖時間。
開啟 gzip 或 brotli 可以明顯改善。
 

增加 worker 數量

如果 CPU 還有空間,可以增加 worker。

但注意:
不要盲目增加,否則可能導致 context switch 變多,反而更慢。

 

DB 慢查詢

資料庫其實是很多 504 的「幕後黑手」。

常見狀況

  • 沒有索引

  • 一次撈太多資料

  • 鎖表

  • 連線池滿載

應用程式其實沒壞,只是在等資料庫。

如何解決
 

加索引

慢查詢幾乎都能從索引改善。
 

分頁查詢

不要一次 SELECT 幾十萬筆資料。
 

重寫 SQL

有時候只是 SQL 寫法太差,EXPLAIN 一下就知道。
 

調整連線池上限

如果連線池太小,新請求會卡在「等連線」。
但也不要設太大,會把 DB 壓垮。

 

外部 API 不穩

你依賴的第三方服務:

  • 金流

  • 物流

  • 驗證

  • 外部資料 API

一旦變慢,你的 thread 就會被拖住。
如果沒有保護機制,很容易整站一起爆 504。

如何解決
 

本地快取

常用資料先快取,不要每次都打 API。
 

回傳預設值(降級)

例如:

  • 推薦清單拿不到 → 顯示熱門商品
  • 第三方資料失敗 → 回傳預設內容

不要讓整頁因為一個 API 壞掉。
 

加入 retry + timeout

設合理 timeout,不要無限等。
Retry 要搭配「指數退避」,避免瞬間打爆對方。
 

封包追蹤網路延遲

用 traceroute / tcpdump 看看是不是網路路徑出問題。

 

DNS 或網路問題

有時候不是系統慢,是「找不到正確的人」。

例如:

  • DNS 解析錯誤

  • TTL 設太長

  • 切主機後還在指向舊 IP

  • 跨區延遲高

如何解決
 

檢查 TTL

切流量或搬主機前,TTL 要先調低。
 

檢查跨區延遲

跨區部署要確認節點延遲是否合理。
 

固定 upstream IP

避免 DNS 解析不穩定造成隨機 timeout。
 

切流量測試

用部分流量測試新節點,不要一次全切。

 

504 設定範例整理:Node.js、Java、Cloudflare 常用做法

這一段我們會用「可直接拿去用」的方式整理:
你不一定要懂所有細節,但你至少要知道:timeout、retry、fallback 這三個東西是避免 504 的基本功,而且要「全鏈路一致」才有效唷。

 

Node.js HTTP client(Axios):先把 timeout 設好,再談 retry

很多新手呼叫第三方 API 時,最常犯的錯是「不設 timeout」。
結果對方一慢,你的請求就一直卡著,卡到上游(Nginx / CDN)先斷線,最後變成 504。
 

設定 timeout(必要)

axios.get(url, {
timeout: 5000
})

  • timeout: 5000 代表 5 秒沒回應就放棄

  • 不要讓請求「無限等待」,無限等待就是 504 的溫床

愛立歐小提醒:
timeout 不是越長越好,重點是「合理」,並搭配 fallback 或快取。
 

加入 retry 機制(建議)

axiosRetry(axios, { retries: 3 });

這代表:失敗時最多重試 3 次。
但要注意喔:retry 不是狂按重送,否則第三方本來只是慢,你會把它打到更慢。

更安全的做法是:

  • 重試要加「間隔」

  • 最好用「指數退避」(越重試越拉長間隔)

  • 只針對「可重試」錯誤(例如網路抖動)重試

 

Java 連線池設定:避免「連線等不到」造成整串逾時

Java 專案常見的 504 問題,除了程式本身慢,還有一個很常被忽略的原因:
連線池用光了

你想像成餐廳座位:
座位(connection)滿了,客人(request)只能排隊,排到最後就超時。
 

連線池三個必看設定

  • maxPoolSize:最大連線數
    設太小會排隊,設太大會把 DB / 外部服務壓垮

  • idleTimeout:閒置多久回收連線
    避免長時間不用的連線佔著位置,造成浪費

  • fallback 機制:真的連不上時要怎麼回應
    例如回傳快取、預設值或提示稍後再試

愛立歐小提醒:
Java 的連線池調整要搭配監控看「等待連線時間」與「連線使用率」,不然很容易越調越亂。

 

Cloudflare:先確認 Edge timeout 上限,再排除 WAF 與快取規則

如果你網站前面有用 Cloudflare(或其他 CDN),那 504 很可能不是你主機直接回的,而是 Edge(邊緣節點)等不到你後端
 

檢查 Edge timeout 上限

每家 CDN 對「邊緣等待時間」都有上限。
如果你的後端回應時間超過上限,就算後端最後會成功,CDN 也會先回 504。

所以你要做的不是只拉長後端 timeout,而是:

  • 確認 Cloudflare 的等待上限

  • 優化後端回應速度(快取、查詢優化、拆解耗時任務)

  • 必要時改成非同步流程(例如先回「已收到」再背景處理)

 

檢查是否被 WAF 擋住

有時候你看到的像 504,但實際是:

  • WAF 規則誤判

  • Bot 防護擋到正常流量

  • 特定國家/ASN 被封

建議你看:

  • Cloudflare Security Events

  • Firewall/WAF logs

確認是不是被攔截或挑戰(challenge)造成請求延遲。
 

測試 bypass cache(排除快取規則干擾)

如果你懷疑快取規則、頁面規則或特定路徑的設定有問題,可以先做「旁路測試」:

  • 暫時對該路徑關閉快取或改規則

  • 測試是否仍會 504

  • 釐清是「快取層」問題,還是「後端回應」問題

 

504 常見問題 FAQ:你最常卡住的點,這裡一次解答

504 Gateway Timeout 是什麼意思?

504 是一種 HTTP 狀態碼,代表「閘道(Gateway)等不到上游伺服器(upstream server)回應」。

白話來說就是:
中間那層(CDN / Nginx)在等後端,但後端太慢或沒回應,時間到了就回傳 504。
通常不是使用者網路問題,而是伺服器端或架構問題。

 

504 是不是代表主機壞掉了?

不一定。

504 多半代表:

  • 主機太忙

  • 資料庫太慢

  • 外部 API 卡住

  • Timeout 設定不一致

很多時候只是流量暴增或某個查詢變慢,不是整台主機掛掉。

 

臨時出現 504,我可以怎麼快速處理?

優先順序建議這樣做:

  • 1. 先開啟快取頁面

  • 2. 降級非關鍵功能

  • 3. 切換到備援節點

  • 4. 臨時擴容主機

先止血,再慢慢排查,不要一開始就亂改設定。

 

為什麼 504 常在流量高峰出現?

因為高峰時:

  • CPU / 記憶體吃滿

  • Thread pool 耗盡

  • 連線池爆滿

  • 第三方 API 同時塞車

平時看不出來的效能瓶頸,在高峰就會被放大。
這也是為什麼壓力測試很重要。

 

504 只在特定頁面發生,該怎麼查?

通常是該頁面:

  • SQL 查詢特別慢

  • 呼叫特定外部 API

  • Feature Flag 差異

  • 某次部署版本改動

建議:

  • 用 Trace ID 鎖定該路徑

  • 對照慢查詢 log

  • 檢查該路徑依賴的服務

 

504 會影響 SEO 嗎?

會,而且影響很大。

如果 Google 爬蟲多次遇到 504:

  • 網頁可能暫時被降權

  • 索引會減少

  • 排名下滑

搜尋引擎會認為網站不穩定。
穩定性其實就是 SEO 的基礎分數。

504 錯誤影響 SEO 排名下降的示意圖,說明網站穩定性不足會導致 Google 索引減少與搜尋權重降低。
 

504要怎麼從根本避免?

記住這幾個原則:

  • 全鏈路 timeout 對齊

  • 高峰前壓測與快取預熱

  • 慢查詢優化

  • 外部 API 加保護機制

  • 監控 p95 / p99 延遲

  • 事後檢討

504 不是偶發 bug,而是架構健康度的警訊。
 

遇到 504 Gateway Timeout:

第一步,穩定服務
第二步,用數據定位瓶頸
第三步,從架構與設定消除根因

不要只改 timeout,那只是延後爆炸時間而已。

如果你發現 504 一直反覆發生,很可能是網站架構、伺服器配置或效能設計本身就有問題。

這時候,找專業團隊協助會更有效率。

如果你希望:

  • 幫你的團隊建立 504 排障 SOP

  • 客製 Nginx / Node / Java 設定範例

  • 優化網站架構避免高峰炸裂

  • 提升整體網站穩定度與 SEO 表現

可以直接聯繫 愛立歐網路

我們專注於高穩定網站架構與效能優化的網頁設計服務,協助企業打造能撐住流量高峰的網站。

👉 現在就預約 愛立歐網頁設計 諮詢,讓網站穩定成為你的競爭優勢。

數字驗證

請由小到大,依序點擊數字

網站設計報價洽詢
我的需求主題(可複選)