はじめに
Web サイトやアプリケーションを運用していると、エラーに遭遇することは避けられません。
その中でも「504 Gateway Time-out」というエラーは、サーバーの応答遅延が原因で発生することが多く、特にリバースプロキシやロードバランサーを利用している環境では頻発することがあります。
本記事では、このエラーの原因と対処法について詳しく解説します。
記事を書こうと思ったきっかけ
受講しているハッカソンの活動中に、他の受講生が 504 Gateway Time-out エラーに直面していました。
原因の特定や解決に苦労している様子を見て、一緒に調査を進める中で多くの知見を得ることができました。
同じ問題に悩む方の助けになればと思い、この記事を書くことにしました。
504 Gateway Time-out エラーの原因と対処法
Web サイトやアプリケーションを運用していると、「504 Gateway Time-out」というエラーに遭遇することがあります。
このエラーは、ゲートウェイ(リバースプロキシやロードバランサー)が、バックエンドサーバーからの応答を受け取れず、一定時間が経過したために発生します。
本記事では、504 Gateway Time-out エラーの主な原因と具体的な対策について解説します。
1. サーバーの処理遅延
原因
- サーバーの負荷が高すぎる
- 実行時間の長いスクリプトやクエリがある
対策
- サーバーのリソース使用状況を確認(
top
やhtop
コマンドを使用) - 負荷が高い場合はリソースを増強(CPU/RAM のスケールアップ)
- 実行時間の長いスクリプトやクエリを最適化
2. サーバー設定(NGINX/Apache)の問題
原因
- タイムアウト時間の設定が短すぎる
対策
- 設定ファイルでタイムアウト時間を延長し、サーバーを再起動
NGINX の場合 (/etc/nginx/nginx.conf
)
http {
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
Apache の場合 (/etc/httpd/conf/httpd.conf
または /etc/apache2/apache2.conf
)
Timeout 600
3. バックエンド(アプリケーション)の問題
原因
- アプリケーションの処理が遅い
対策
- アプリケーションのログを確認(
/var/log/app.log
など) - 遅い処理の最適化(キャッシュの活用、並列処理の導入)
- データベースクエリのチューニング
4. データベースの応答遅延
原因
- クエリの実行時間が長い
対策
-
EXPLAIN
を使ってクエリを分析し、適切なインデックスを追加 - クエリキャッシュを利用
- 非同期処理やバッチ処理を検討
5. クラウド環境での問題
原因
- AWS, GCP などのロードバランサーのタイムアウト設定が短い
対策
- AWS ALB の
Idle Timeout
を延長(デフォルト60秒 → 300秒など) - AWS Lambda を利用する場合、タイムアウト設定を適切に調整
6. ネットワーク接続の問題
原因
- ネットワーク遅延や接続障害
対策
-
ping
やtraceroute
を使ってネットワークの遅延をチェック - Firewall の設定を確認
- サーバー間通信の経路を見直し
まとめ
「504 Gateway Time-out」エラーは、サーバーの負荷、設定ミス、アプリケーションの処理速度、データベースの遅延、クラウド環境の設定、ネットワークの問題など、さまざまな要因で発生します。
まずは サーバーの負荷を確認し、設定の見直しや処理の最適化を進める ことが重要です。
特に NGINX/Apache のタイムアウト設定やデータベースのチューニング など、適切な対策を施すことで、このエラーを回避できます。