UnsplashのAnkit Singhが撮影した写真
Webサイトを閲覧中に「504 Gateway Timeout」と表示され、ページが読み込めないことはありませんか? 504は、ブラウザではなくサーバー側(サーバー間通信)で待ち時間が限界に達したときに返されるエラーです。この記事では、504エラーの原因と、利用者・運用者それぞれの対処ポイントを分かりやすく整理します。
504エラーは、Webサイトやアプリケーションにアクセスした際に返されるHTTPステータスコードの一つです。このエラーは、サーバー間の通信が時間内に完了しなかったことを示します。
504エラーはGateway Timeout(ゲートウェイ タイムアウト)とも呼ばれます。リクエストを受け取ったサーバー(例:ロードバランサー、リバースプロキシ、APIゲートウェイなど)が、上流(バックエンド)サーバーからの応答を待つ間にタイムアウトし、処理を打ち切って返すエラーです。
504エラーが起きる流れは、概ね次の通りです。
504は「待ち時間(タイムアウト)」が直接のトリガーです。タイムアウトとは、あらかじめ設定された時間内に処理が完了しなかった状態を指します。サーバーは無限に待ち続けられないため、一定時間を超えるとタイムアウトとして処理を終了し、504を返します。
504は似たエラーと混同されがちです。違いを整理しておくと切り分けがしやすくなります。
| エラーコード | 概要 |
|---|---|
| 502 Bad Gateway | 上流サーバーから「無効な応答」を受け取った(応答は来たが内容が成立していない)。 |
| 503 Service Unavailable | サーバーが一時的に処理できない(過負荷・メンテナンス等)ため受付できない。 |
| 504 Gateway Timeout | 上流サーバーの応答が時間内に返らず、待ち切れなかった。 |
いずれもサーバー側の問題を示すことが多い一方で、504は「サーバー間通信の待ち時間切れ」である点が特徴です。
504エラーは「上流からの応答が返らない/遅い」ことで発生します。背景には複数の原因があり得るため、切り分けが重要です。
もっとも多い原因は、バックエンドの処理が遅く、タイムアウト時間を超えることです。サーバーのリソース不足、DBの重いクエリ、外部API呼び出しの遅延、ロック待ちなどが起点になります。
サーバー自体が健全でも、ネットワークの遅延や断続的な切断で上流の応答が届かないことがあります。回線混雑、機器障害、DNSの不調、経路上のFW/プロキシ設定などが影響します。
アプリケーションのバグや設定ミスにより、処理が長引くケースもあります。無限ループ、外部依存のリトライ過多、例外処理の抜けなどで、結果としてタイムアウトにつながります。
アクセス集中や攻撃でサーバーが過負荷になると、正常系の処理が遅れやすくなります。大量リクエストによりCPU/メモリ/接続数が逼迫すると、上流応答が遅れ、504が出やすくなります。
504は原因が一つとは限りません。ここでは「利用者側でできること」と「運用者側で行うこと」を分けて整理します。
504の直接原因はタイムアウトです。入口(LB/プロキシ)とバックエンド双方のタイムアウト値を確認し、処理特性に合っているか見直します。
ただし、値を大きくし過ぎると接続が滞留し、別の不調を呼ぶことがあります。「処理を速くする」対策とセットで検討するのが安全です。
504の背景にリソース不足がある場合、CPU・メモリ・I/O・接続数のボトルネックを潰すことが近道です。
ネットワーク起因の場合は、遅延・パケットロス・DNS・経路を疑います。監視で異常が出ていないかを確認しつつ、必要なら冗長化も検討します。
アプリ側が原因の場合は、ログと計測で「どこに時間がかかっているか」を特定します。タイムアウトを伸ばす前に、遅い理由を潰すのが基本です。
504の予兆は、レスポンスタイムの悪化やエラー率の増加として現れます。重要指標を継続監視し、閾値を設けて通知することで、影響が広がる前に手が打てます。
負荷テスト/ストレステストで限界点を把握し、タイムアウト値・スケーリング・DB設計などを事前に調整しておくと、運用中の504を減らしやすくなります。
単一障害点があると、そこが詰まった瞬間に504が連鎖します。冗長化、ヘルスチェック、フェイルオーバーを整備し、落ちた先を切り離せる設計にしておくことが重要です。
504が出たら、原因は「入口」ではなく「上流」にあることが多いです。ログ(プロキシ/LB/アプリ/DB)を時刻で突き合わせ、どこで待たされているのかを共有できる形にすると、復旧も再発防止も早くなります。
504 Gateway Timeoutは、入口となるサーバーが上流サーバーの応答を待ち切れず、タイムアウトしたときに返されるエラーです。原因は、バックエンド処理の遅延、ネットワーク問題、アプリ不具合、過負荷(攻撃・アクセス集中)など多岐にわたります。利用者側では再試行や回線切り分けが有効です。運用者側では、タイムアウト設定の確認に加え、処理の最適化、監視、冗長化、ログ分析を組み合わせて、発生頻度と影響を抑えていきましょう。
入口となるサーバー(プロキシ/ロードバランサー等)が、上流サーバーの応答を待つ間にタイムアウトし、処理を打ち切って返すHTTPエラーです。
多くの場合はサーバー側(サーバー間通信やバックエンド処理)の問題です。ただし回線やDNSなど閲覧環境の影響がゼロとは限りません。
少し待って再読み込みし、可能なら別回線でも試してください。頻発する場合は、発生時刻とURLを添えて管理者に連絡すると切り分けが進みます。
502は「上流から無効な応答が返った」、503は「サーバーが一時的に利用できない」、504は「上流応答が時間内に返らず待ち切れない」という違いがあります。
改善する場合はありますが、根本原因が処理遅延なら先に最適化が必要です。タイムアウトを伸ばし過ぎると接続が滞留し、別の不調を招くこともあります。
プロキシ/LB/アプリ/DBのログを時刻で突き合わせ、入口のタイムアウト設定と一致する箇所を確認します。APMや分散トレーシングがあると特定が早くなります。
重いDBクエリ、外部APIの遅延、リソース不足、ネットワーク遅延、過負荷(アクセス集中・攻撃)などが代表例です。
継続監視(レスポンスタイム・エラー率・リソース)、負荷テスト、ボトルネック改善、冗長化、ログ分析の仕組み化が効果的です。
起きます。ロードバランサーやAPIゲートウェイ、サーバレスの待ち時間上限など、構成要素ごとの制約が原因になることがあります。
急なアクセス集中、バッチ処理の重なり、外部サービス障害、ネットワーク不調、リリース直後の不具合などで、一時的に応答が遅れて504が増えることがあります。