503 Service Unavailableの意味と対処法:nginx・Varnish・HAProxy別

ポイント

503エラー(503 Service Unavailable)は、サーバーまたはその手前の層(ロードバランサー、CDN、プロキシ)が今リクエストを処理できない状態です。過負荷、メンテナンス中、レート制限中、または転送先の正常なバックエンドがないことが原因で、本来は一時的なエラーです。訪問者にできるのは、待ってから再試行することだけです。サイト管理者は、正確なメッセージからどの層が応答したか(nginx、Apache、IIS、HAProxy、Varnish、Cloudflare)を特定し、その層のログを確認しましょう。

今すぐ確認

HTTP 503 Service Unavailableエラーの修正ガイド — サーバーエラー画面とステップバイステップのトラブルシューティング手順
HTTP 503 Service Unavailableエラーの修正ガイド — サーバーエラー画面とステップバイステップのトラブルシューティング手順
読み始める
  1. HTTPエラー503とは?
  2. 503エラーの表示例
  3. HTTPエラー503の主な原因
  4. 訪問者向けの対処法
  5. 対処法1:503を返した層を特定する
  6. 対処法2:サーバーリソース(CPU、RAM、ディスク)を確認する
  7. 対処法3:エラーログを確認する
  8. 対処法4:プラグインとテーマを無効化する(WordPress / CMS)
  9. 対処法5:PHPとサーバーの制限値を引き上げる
  10. 対処法6:CDNやロードバランサーを確認する
  11. 対処法7:DDoSやボット攻撃を確認する
  12. 対処法8:データベース接続の問題を修正する
  13. 対処法9:ホスティングプロバイダーに問い合わせる
  14. 503と他のHTTPエラーの違い
  15. 503エラーを予防する方法
  16. よくある質問

HTTPエラー503とは?

503 Service Unavailableは、サーバー、またはその手前にある何かが、今リクエストを処理できないことを意味します。過負荷、メンテナンス中、リクエスト数の制限(レート制限)中、または転送先の正常なバックエンドがない状態です。 RFC 9110は503を、しばらく待てば解消する可能性が高い一時的な状態と定義しています。

サーバーは、どれくらい待てばよいかを示すRetry-Afterヘッダーを付けることがあります。何かが壊れたことを意味する500と違い、503は「今は無理」という意味です。そのため、計画メンテナンスには503が使われます。

実際には、Webサーバー自体ではなく、その手前の層が応答していることがよくあります。HAProxyのようなロードバランサー、Varnishのようなキャッシュ、CloudflareのようなCDN、あるいはKubernetesのIngressです。正確な文言を見れば、どの層かがわかります(下の表を参照)。

全員がアクセスできないのか、今すぐ確認

503エラーの表示例

メッセージを見れば、どの層が応答したかがわかります。よく見かけるメッセージと、それを表示するソフトウェアは次のとおりです。

メッセージ送信元主な意味
503 Service Temporarily Unavailable(下に「nginx」の表示)nginx(Kubernetesのingress-nginxを含む)リクエスト数や接続数の制限、メンテナンス用のルール、または(Ingressの場合)サービスに準備完了のPodがない
Service Unavailable · The server is temporarily unable to service your request due to maintenance downtime or capacity problemsApachemod_proxyがバックエンドに接続できなかった、またはメンテナンス用の設定
HTTP Error 503. The service is unavailable.IIS(HTTP.sys)サイトのアプリケーション プールが停止しているか、要求キューがいっぱい(理由はHTTPERRログに記録される)
503 Service Unavailable · No server is available to handle this request.HAProxyリクエストを受けられるバックエンドサーバーがない(すべてヘルスチェックに失敗した、すべて満杯でキューの待ち時間を超えた、または接続を拒否された)
Error 503 Backend fetch failed(Guru Meditation)VarnishVarnishがバックエンドからページを取得できなかった
「cloudflare」と書かれた503ページCloudflareCloudflare自体の問題、または上限を超えたWorker
Error 503 (Service Unavailable)!!1GoogleのサーバーGoogleのサービス、またはGoogleでホストされているアプリが過負荷
Briefly unavailable for scheduled maintenance. Check back in a minute.(日本語のサイトでは「現在メンテナンス中のため、しばらくの間ご利用いただけません。」)WordPress更新の実行中(残った.maintenanceファイルは、10分を過ぎるとWordPressが無視する)

文言が何であれ、意味は同じです。このリクエストは今は処理できず、調べるべきなのは表の「送信元」にある層です。

HTTPエラー503の主な原因

サーバーやその手前の層が503を返す主な理由は次のとおりです。

  • 過負荷 — トラフィックの急増、話題になった投稿、攻撃的なクローラーによって、CPU、メモリ、接続数の上限に達している状態です。
  • 計画メンテナンス — 更新や移行のために、意図的にサイトを止めている状態です。正しく行うなら、Retry-Afterヘッダーを付けます。
  • 正常なバックエンドがない — ロードバランサー、プロキシ、Ingressが、リクエストを送れる正常なサーバーを見つけられない状態です(アプリのクラッシュ、ヘルスチェックの失敗、準備完了のPodがない)。
  • リクエスト数・接続数の制限 — nginxのlimit_reqとlimit_connはデフォルトで503を返すため、リクエストの多いクライアントやクローラーがきっかけになることがあります。
  • アプリケーションのクラッシュや停止 — Webサーバーは動いているのに、その奥のPHP-FPM、Node.js、Pythonが止まっている状態です。IISでは、アプリケーション プールが停止している状態です。
  • ホスティングのリソース制限 — 共有ホスティングでは、アカウントごとにCPU、メモリ、プロセス数が制限されています。
  • プラグイン、テーマ、アップデート — WordPressなどのCMSでは、不具合のあるアップデートがアプリを止めたり、サイトがメンテナンスモードのまま戻らなくなったりすることがあります。
  • 攻撃 — DDoSやボットの大量アクセスは、トラフィック急増と同じようにリソースを使い果たします。

訪問者向けの対処法

他人のサイトで503が出ている場合、問題は相手側にあります。訪問者にできることは次のとおりです。

  • 待ってから再試行する — 503はもともと一時的なエラーです。1分ほど待ってから、1回だけ再読み込みしてください。ページにRetry-Afterの時間やメンテナンスの案内があれば、その時間だけ待ちましょう。
  • 全員がアクセスできないのか確認する — DNS Robotのサーバーダウンチェックは、あなたのネットワークの外からサイトをテストします。
  • サイトのステータスページやSNSを確認する — 計画メンテナンスや障害は、たいてい告知されています。
  • 別のネットワークで試す — モバイルデータ通信なら開ける場合、普段のネットワークのVPNやプロキシが503を返しているか、サイトがあなたのIPアドレスのリクエスト数を制限しています。

対処法1:503を返した層を特定する

何かを再起動する前に、メッセージとレスポンスヘッダーを確認しましょう。どの層が応答したかがわかります。DNS RobotのHTTPヘッダーチェッカーやcurl -sIで外部から確認し、serverヘッダーと本文を見てください(上の表を参照)。

そのうえで、Webサーバーだけでなく、実際に問題が起きている層を再起動します。

bash
# Restart Nginx
sudo systemctl restart nginx

# Restart Apache
sudo systemctl restart apache2      # Debian/Ubuntu
sudo systemctl restart httpd         # CentOS/RHEL

# Restart PHP-FPM
sudo systemctl restart php8.2-fpm    # Adjust version as needed

# Restart Node.js (PM2)
pm2 restart all

# Restart entire server (last resort)
sudo reboot

再起動から数分以内に503が戻ってくるなら、原因はまだ残っています。リソースとログの確認に進みましょう。

対処法2:サーバーリソース(CPU、RAM、ディスク)を確認する

サーバーが過負荷状態の場合、再起動は一時的な対処にしかなりません。何がリソースを消費しているか確認しましょう。

bash
# Check CPU and memory usage
top -bn1 | head -20

# Check disk space
df -h

# Check memory in detail
free -m

# Check active connections
ss -s

# Find processes using the most memory
ps aux --sort=-%mem | head -10

# Find processes using the most CPU
ps aux --sort=-%cpu | head -10

CPUまたはRAMが90%以上の場合、アプリケーションの最適化、暴走プロセスの終了、またはサーバーのアップグレードが必要です。ディスク容量が満杯の場合は、ログファイル、古いバックアップ、一時ファイルを削除してください。

対処法3:エラーログを確認する

ログを見れば、503が起きた理由が正確にわかります。下のコマンドで最新の行を読み、次の文言を探してください。

bash
# Nginx error log
tail -50 /var/log/nginx/error.log

# Apache error log
tail -50 /var/log/apache2/error.log      # Debian/Ubuntu
tail -50 /var/log/httpd/error_log         # CentOS/RHEL

# PHP-FPM log
tail -50 /var/log/php8.2-fpm.log

# WordPress debug log (if WP_DEBUG_LOG is enabled)
tail -50 /var/www/html/wp-content/debug.log

# System log
tail -50 /var/log/syslog

「limiting requests」または「limiting connections」(nginx)— limit_reqまたはlimit_connがリクエストを拒否しました。limit_req_statusやlimit_conn_statusを設定していなければ、503を返します。

「max_children」(PHP-FPM、例:「server reached pm.max_children setting」)— PHPワーカーがすべて使用中です。この場合、Apacheは503を返しますが、nginxは502または504を返します。

「AH01114」/「failed to make connection to backend」(Apacheのmod_proxy)— Apacheがバックエンドに接続できず、503を返しました。

「Too many connections」(MySQL)— データベースの接続数の上限に達しています。

nginxの「no live upstreams」と「upstream timed out」は503ではなく、502 Bad Gatewayと504 Gateway Timeoutに当たります。

対処法4:プラグインとテーマを無効化する(WordPress / CMS)

WordPressなどのCMSでは、重いプラグインがPHPワーカーやホスティングのリソース上限を使い果たし、503になることがあります(プラグインがクラッシュした場合は503ではなく500になります)。プラグインの更新やインストールの後に503が出始めたなら、まずそのプラグインを疑いましょう。

WordPress管理画面にアクセスできない場合は、ファイルシステムまたはデータベース経由でプラグインを無効化できます。

bash
# Disable all plugins by renaming the plugins folder
cd /var/www/html/wp-content
mv plugins plugins_disabled

# If the site loads, rename it back and re-enable plugins one by one
mv plugins_disabled plugins

# To disable a single plugin
mv plugins/problem-plugin plugins/problem-plugin.disabled

不具合のあるプラグインを特定したら、更新、代替プラグインへの変更、またはプラグイン開発者への問い合わせを行ってください。また、PHPバージョンの互換性も確認しましょう。サーバーのPHPアップグレード時に一部のプラグインが動作しなくなることがあります。

「Briefly unavailable for scheduled maintenance」(日本語のサイトでは「現在メンテナンス中のため、しばらくの間ご利用いただけません。」)のまま戻らない場合:WordPressは更新中にサイトのルートに.maintenanceファイルを作成し、作成から10分を過ぎたファイルは無視します。早く戻したいなら、このファイルを削除してください。それでもメッセージが消えない場合は、wp-content/maintenance.phpファイルや、キャッシュされたページのコピーがないか確認しましょう。

対処法5:PHPとサーバーの制限値を引き上げる

PHPワーカーの不足やメモリ制限に達した場合は、設定ファイルで制限値を引き上げる必要があります。

ini
; PHP-FPM pool (e.g. /etc/php/8.2/fpm/pool.d/www.conf); the default ships with pm.max_children = 5
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

; php.ini (defaults: memory_limit = 128M, max_execution_time = 30)
memory_limit = 256M
max_execution_time = 300

変更後は、新しい上限を読み込ませるためにPHP-FPMを再起動してください(sudo systemctl restart php8.2-fpm、バージョンは環境に合わせて)。

対処法6:CDNやロードバランサーを確認する

Cloudflareや他のCDN、ロードバランサーを使っている場合、503はサーバーではなくそちらから返されている可能性があります。

Cloudflareによる見分け方(Cloudflareの503ガイド)は次のとおりです。

  • ページに「cloudflare」または「cloudflare-nginx」とある場合 — Cloudflareが生成したページです。CPUやメモリの上限を超えたWorkerがないか確認し、/cdn-cgi/traceの出力を添えてCloudflareのサポートに問い合わせてください。
  • Cloudflareの表示がない場合 — オリジンサーバーが503を返し、Cloudflareがそれをそのまま中継しています。オリジンのログを確認し、ホスティング会社がCloudflareのIPアドレスにレート制限をかけていないか問い合わせましょう。

HAProxy、クラウドのロードバランサー、KubernetesのIngressの場合は、バックエンドを確認してください。そこでの503は、たいていリクエストを受けられるバックエンドがないことを意味します(AWSのApplication Load Balancerなら、ターゲットグループに登録済みのターゲットがないということです)。DNS RobotのDNS確認で、ドメインが想定どおりの場所を指しているかも確認しましょう。

対処法7:DDoSやボット攻撃を確認する

ボットからの突然のトラフィック急増やDDoS攻撃は、サーバーを圧倒します。アクセスログで不審なパターンを確認しましょう。

bash
# Count requests per IP in the last 1000 lines
tail -1000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

# Requests per minute (use -f1-4 for per second)
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1-3 | uniq -c | sort -rn | head -10

# Block an abusive IP (-I puts the rule first, before any ACCEPT rules)
sudo iptables -I INPUT -s 1.2.3.4 -j DROP

# Or in nginx's server block:
# deny 1.2.3.4;

1つのアドレスや狭い範囲から数千件のリクエストが来ているなら、ファイアウォールでブロックしましょう。CloudflareなどのCDNを経由している場合は、まずログに実際の訪問者のIPが記録されるようにします(nginxのset_real_ip_fromとreal_ip_header CF-Connecting-IP)。そうしないと、攻撃者ではなくCDNをブロックしてしまいます。大規模な攻撃には、Cloudflareの「I'm Under Attack」モードやホスティング会社のDDoS対策が、サーバーに届く前にトラフィックをふるい落としてくれます。

対処法8:データベース接続の問題を修正する

データベースの接続数が尽きたり、データベースが停止したりすると、その手前のアプリケーションが失敗することがあります。このとき503を返すアプリもありますが、WordPressは代わりに「Error establishing a database connection」(日本語のサイトでは「データベース接続確立エラー」)を表示します。データベースを直接確認しましょう。

bash
# Check if MySQL/MariaDB is running (the unit is mysqld on RHEL, mariadb for MariaDB)
sudo systemctl status mysql

# Restart MySQL
sudo systemctl restart mysql

# Check current connections vs limit
mysql -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -e "SHOW VARIABLES LIKE 'max_connections';"

# Increase max connections (temporary)
mysql -e "SET GLOBAL max_connections = 200;"

# Check for long-running queries
mysql -e "SHOW PROCESSLIST;" | head -20

スリープ状態の接続が多数ある場合、アプリケーションがデータベース接続を適切に閉じていません。長時間実行中のクエリが他のクエリをブロックしている場合は、そのクエリを最適化するか強制終了してデータベースのブロックを解除しましょう。

対処法9:ホスティングプロバイダーに問い合わせる

共有ホスティング、マネージドWordPressホスティング、またはSquarespace、Wix、Shopifyなどのプラットフォームを利用している場合、サーバーログへのアクセスやサービスの再起動ができないことがあります。このような場合、503はホスティングプロバイダーのインフラが原因の可能性があります。

ホスティングプロバイダーのサポートに以下の情報を伝えてください。

  • 503が返されるURL — 正確なURLを伝える
  • エラーが始まった時刻 — 日時を記録しておく
  • 変更点 — プラグインのインストール、テーマの更新、DNS設定の変更などを行ったか
  • 断続的か恒常的か — 断続的な503はリソース制限を、恒常的な503はクラッシュや設定ミスを示唆します

503と他のHTTPエラーの違い

503エラーは他のサーバーエラーと混同されがちです。それぞれの違いを以下にまとめます。

エラーコード名前意味一時的?
500Internal Server Errorサーバーが予期しないエラーに遭遇した(バグ、クラッシュ、設定ミス)場合による
502Bad Gatewayプロキシ/ロードバランサーがアップストリームサーバーから無効なレスポンスを受信した場合による
503Service Unavailableサーバーやその手前の層が今リクエストを受けられない(過負荷、メンテナンス、制限、正常なバックエンドがない)はい
504Gateway Timeoutプロキシ/ロードバランサーがアップストリームサーバーからのレスポンスを時間内に受信できなかった場合による
520-530Cloudflare ErrorsCloudflare固有のオリジン接続エラーさまざま

重要な違いは、503はもともと一時的なエラーであることです。Retry-Afterヘッダーで期間を示すこともできます。クロールについては、Googleは5xxエラーと429エラーを同じように扱います。クローラーはクロールの頻度を落とし、インデックス済みのURLはしばらく保持しますが、エラーが続けば最終的にインデックスから削除します(Google検索セントラル)。

プロキシ側のエラーについては502 Bad Gatewayと504 Gateway Timeoutを、レート制限については429 Too Many Requestsを参照してください。

503エラーを予防する方法

予防は事後対応よりも効果的です。503エラーを未然に防ぐためのベストプラクティスを紹介します。

  • サーバーリソースの監視 — CPU 80%超、RAM 85%超、ディスク 90%超でアラートを設定しましょう。UptimeRobot、Pingdom、Grafanaなどのツールで即座に通知を受け取れます。
  • CDNの利用 — Cloudflare、Fastly、AWS CloudFrontは静的アセットをキャッシュし、トラフィックの急増を吸収してオリジンサーバーの負荷を軽減します。
  • キャッシュの有効化 — Redis、Memcached、Varnishを使ってデータベースクエリやレンダリング済みページをキャッシュしましょう。WordPressユーザーはWP Super CacheやW3 Total Cacheなどのキャッシュプラグインを導入してください。
  • オートスケーリング — クラウドホスティング(AWS、GCP、Azure、DigitalOcean)を利用している場合、トラフィック急増時に自動でサーバーを追加するオートスケーリングを設定しましょう。
  • ボットのレート制限 — 攻撃的なクローラーやスクレイパーがサーバーを過負荷にする前に、nginxまたはCloudflareでレート制限を設定しましょう。
  • データベースクエリの最適化 — 遅いクエリは接続やワーカーを長時間ふさぎます。インデックスの追加やJOINの最適化を行い、結果をRedisやMemcachedにキャッシュしましょう。
  • 適切なメンテナンスページの使用 — デプロイ中はサーバーをクラッシュさせるのではなく、Retry-Afterヘッダー付きの503を返しましょう。SEOを守り、ユーザーに状況を伝えられます。
  • ソフトウェアの最新化 — CMS、プラグイン、PHP、データベースを最新の安定版に更新して、既知のバグやセキュリティ上の問題を避けましょう。

サイトは全員にとってダウンしていますか?

DNS Robotの無料サイトダウンチェッカーで、あなたのネットワークの外から任意のWebサイトを確認できます。ステータスコード、応答時間、そして全員にとってダウンしているのか自分だけなのかがわかります。

出典

  1. RFC 9110 §15.6.4: 503 Service Unavailable, IETF
  2. Error 503, Cloudflare
  3. How HTTP status codes affect Google's crawlers, Google Search Central
  4. ngx_http_limit_req_module (limit_req_status), nginx

よくある質問

503 Service Unavailableとはどういう意味ですか?

サーバー、またはその手前のロードバランサー、CDN、プロキシが、今リクエストを処理できないという意味です。過負荷、メンテナンス中、レート制限中、または正常なバックエンドがない状態です。RFC 9110は503を一時的な状態と定義しています。

503エラーは一時的なものですか?どのくらい続きますか?

もともと一時的なエラーです。503は「今は無理」という意味で、サーバーはどれくらい待てばよいかを示すRetry-Afterヘッダーを送ることがあります。実際には原因が続く間だけ続きます。トラフィック急増なら数秒、メンテナンスなら数分から数時間、アプリがクラッシュした場合は誰かが再起動するまでです。

訪問者として503エラーをどう対処すればよいですか?

1分ほど待ってから、1回だけ再読み込みしてください。何度も再読み込みしても効果はありません。サイトダウンチェッカーで全員にとってダウンしているかを確認し、サイトのステータスページも見てみましょう。モバイルデータ通信でも試してください。そちらで開けるなら、普段お使いのネットワークのVPNやプロキシが応答しているか、サイトがあなたのIPアドレスをレート制限しています。

503エラーの根本的な原因は何ですか?

多くは、過負荷、計画メンテナンス、リクエスト数・接続数の制限、バックエンドアプリのクラッシュ、正常なサーバーがないロードバランサーのいずれかです。メッセージの文言(nginx、Apache、IIS、HAProxy、Varnish、Cloudflare)を見れば、どの層を確認すべきかがわかります。

nginxで「503 Service Temporarily Unavailable」が発生する原因は?

nginx自身は、リクエスト数・接続数の制限(limit_reqとlimit_connのデフォルト応答は503)とメンテナンス用のルールで503を返します。Kubernetesでは、サービスに準備完了のPodがないときにingress-nginxが503を返します。バックエンドがクラッシュした場合は502、応答が遅い場合は504で、503にはなりません。

「HTTP Error 503. The service is unavailable.」とはどういう意味ですか?

IISのメッセージです。サイトのアプリケーション プールが停止している(短時間に何度も続けてクラッシュしたためにIISのラピッド フェール保護が停止させたケースがよくあります)か、リクエストキューがいっぱいになっています。HTTPERRログに理由が記録されています。IIS マネージャーでプールを開始し、Windowsのイベント ログでクラッシュの原因を確認してください。

「No server is available to handle this request」とはどういう意味ですか?

HAProxyの標準の503ページです。ロードバランサーの背後のどのバックエンドサーバーもリクエストを受け付けられなかったという意味で、すべてがヘルスチェックに失敗した、すべてが満杯のままキューがタイムアウトした、または接続を拒否した場合に出ます。サイトの運営者がバックエンドを修正する必要があります。訪問者は時間を置いてから再試行してください。

「Error 503 Backend fetch failed」(バックエンドフェッチに失敗しました)とはどういう意味ですか?

Varnish(Webサイトの手前で動くキャッシュサーバー)の標準のエラーページです。「バックエンドからの取得に失敗した」という意味で、Varnishがページを取りに行った先のWebサーバー(バックエンド)が停止している、接続を拒否した、または時間内に応答しなかったことを示します。原因はサイト側にあるので、訪問者は少し待ってから再読み込みしてください(Varnishの標準ページはRetry-Afterヘッダーで5秒後の再試行を指定しています)。ページ下部の「Guru Meditation」に出るXIDはそのリクエストの番号で、サイト管理者がVarnishのログで原因を調べる手がかりになります。管理者は、バックエンドのWebサーバーとアプリが動いているか、そのエラーログを確認しましょう。

503エラーはSEOに悪影響がありますか?

短時間なら問題ありません。Googleのクローラーは5xxエラーを受けるとクロールの頻度を落とし、インデックス済みのURLをしばらく保持しますが、エラーが続くとインデックスから削除します。計画メンテナンスには、404や200のエラーページではなく、Retry-Afterヘッダー付きの503を使いましょう。

502エラーと503エラーの違いは何ですか?

502 Bad Gatewayは、プロキシがバックエンドから無効な応答を受け取った、または応答を受け取れなかったという意味です。503は、サーバーやプロキシが今リクエストを受け付けられないという意味です。ロードバランサーは正常なバックエンドがないときに503を返すことが多いため、両者の原因が同じこともあります。

WordPressで503を修正するにはどうすればよいですか?

「現在メンテナンス中のため、しばらくの間ご利用いただけません。」(英語では「Briefly unavailable for scheduled maintenance」)と表示されている場合は、サイトのルートにある.maintenanceファイルを削除してください。そうでなければ、SFTPでwp-content/pluginsフォルダーの名前を変えてプラグインを無効化します。サイトが戻ったらプラグインを1つずつ有効化し直し、ホスティングのリソース上限も確認しましょう。

著者について

Shaik Vahid

DNS Robot 創設者. Vahid は長年 Web ホスティングのサポートで、お客様のドメイン、DNS レコード、SSL 証明書、メール配信の問題を解決してきました。DNS Robot のツールを開発し、実際によく起きるエラーをもとにこれらのガイドを書いています。

サイトダウンチェッカー

落ちてるのは全員か自分だけか?11か所とお使いの回線からサイトを確認し、実際の画面のスクリーンショットも表示