IIS HTTPエラー 503: Service Unavailable(サービス利用不可)の修正方法

beginner🪟 Windows2026-06-07| Windows Server 2016/2019/2022, IIS 8.5, IIS 10.0, ASP.NET Core / Framework

Error Message

HTTP Error 503. The service is unavailable
#iis#アプリケーションプール#トラブルシューティング#windows-server

問題の概要

URLにアクセスしてホームページが表示されるのを期待した際、無機質な Service Unavailable メッセージが表示されることがあります。IISにおいて、これはほぼ間違いなくアプリケーションプールがクラッシュしたか停止していることを意味します。手動で開始しても、ページを更新した瞬間に再び停止してしまうこともあります。

分析:なぜ503エラーが発生するのか

503ステータスコードは、「ページ」のエラーではなく「サービス」のエラーです。IIS環境では、HTTP.sysドライバがリクエストを受信しますが、それを処理するためのアクティブなワーカープロセス(w3wp.exe)が見つからない場合に発生します。これにはいくつかの特定の理由があります:

  • 資格情報の期限切れ: 企業環境では、サービスアカウントのパスワードが30〜90日ごとに変更されます。アプリケーションプールの識別子(Identity)が更新されていない場合、ログインに失敗します。
  • 急速失敗保護(Rapid-Fail Protection): デフォルトでは、5分間に5回アプリがクラッシュすると、IISはCPUリソースを保護するためにプールを強制停止します。
  • ランタイムの不足: コードの実行に ASP.NET Core Hosting Bundle が必要であるにもかかわらず、.NET Runtime しかインストールされていない場合などです。
  • フォルダへのアクセス権限: サービスアカウントに、Webサイトの物理パスに対する「読み取り」権限が不足している場合に発生します。

ステップ1:識別子のリセット

503エラーの約70%は資格情報の問題が原因です。ドメインアカウントや特定のローカルユーザーを使用している場合、最近のパスワード変更によりサイトが即座にダウンします。

  • IIS マネージャーを起動します。
  • 左側のナビゲーションからアプリケーション プールを選択します。
  • 対象のプールを右クリックし、詳細設定を選択します。
  • プロセス モデルセクションにある識別子の行を探します。
  • カスタムアカウントを使用している場合は、**設定...**をクリックし、更新されたパスワードを入力します。
  • プールを再起動し、サイトを更新して確認します。

ステップ2:イベントビューアーの確認

推測はやめて、ログを確認しましょう。Windowsはプロセスが開始できなかった正確な理由を記録しています。これは試行錯誤するよりもはるかに迅速です。

  • Win + R キーを押し、eventvwr.msc と入力して実行します。
  • Windows ログを展開し、システムを選択します。
  • ソースを WAS (Windows Process Activation Service) でフィルタリングします。
  • イベント ID 5021(無効な識別子)または 5059(アプリケーションプールの失敗)を探します。
# 一般的なエラーログの例:
アプリケーション プール 'ProductionPool' は無効にされました。
Windows プロセス アクティブ化サービス (WAS) でエラーが発生しました。

ステップ3:急速失敗保護のサイクルを解除する

IISはサーバーを「クラッシュループ」から保護します。起動直後にアプリがクラッシュする場合、IISは数回の試行後に停止します。根本的なコードエラーを確認するには、一時的にこのセーフティネットを無効にする必要があります。

  • アプリケーションプールの詳細設定を開きます。
  • 急速失敗保護セクションまでスクロールします。
  • 有効False に変更します。
  • プールをリサイクル(再起動)します。これでサイトは「開始」状態を維持し、バグのあるコードや不足しているDLLを特定するための詳細な 500.xx エラーが表示されるようになります。

ステップ4:フォルダ権限の修正

アプリケーションプールには有効なログインだけでなく、Webフォルダに対する「読み取りと実行」権限が必要です。ApplicationPoolIdentity を使用している場合でも、ファイルへの特定のアクセス権が必要です。

# PowerShellを使用して特定のアプリケーションプールに権限を付与する
icacls "C:\inetpub\wwwroot\my-app" /grant "IIS AppPool\MyPoolName:(OI)(CI)(RX)"

ステップ5:ポートの競合を確認する

他のアプリケーションがポート80または443を使用している可能性があります。503エラーでは稀ですが、NginxやApacheのようなプロキシが同じマシンで動作し、IISとトラフィックを奪い合っている場合に発生することがあります。

# ポート80でリスニングしているプロセスを確認する
etstat -ano | findstr :80
# 最後の列のPIDを使用してプロセス名を特定する
tasklist /fi "pid eq [YOUR_PID]"

修正の確認

HTTPヘッダーを確認して修正を確定します。ブラウザのキャッシュ問題を避けるため、コマンドラインツールを使用してください。

  • アプリケーションプールを手動で開始します。
  • 次のコマンドを実行します: curl -I http://localhost/
  • 修正が成功していれば HTTP/1.1 200 OK が返されます。
  • 5分間待ちます。プールがまだ動作していれば、急速失敗保護の問題も解決されています。

Related Error Notes