一般的なHTTPエラーコードのトラブルシューティング方法
序章
Webサーバーまたはアプリケーションにアクセスする場合、サーバーが受信するすべてのHTTP要求は、HTTPステータスコードで応答されます。 HTTPステータスコードは3桁のコードであり、5つの異なるクラスにグループ化されています。 ステータスコードのクラスは、最初の桁で識別できます。
- 1xx:情報
- 2xx:成功
- 3xx:リダイレクト
- 4xx:クライアントエラー
- 5xx:サーバーエラー
このガイドは、最も一般的に発生するHTTPエラーコードの特定とトラブルシューティングに焦点を当てています。 システム管理者の観点から見た4xxおよび5xxステータスコード。 Webサーバーが特定のエラーコードでリクエストに応答する原因となる可能性のある多くの状況があります。一般的な潜在的な原因と解決策について説明します。
クライアントとサーバーのエラーの概要
クライアントエラー、または400〜499のHTTPステータスコードは、ユーザークライアント(つまり、 Webブラウザまたはその他のHTTPクライアント)。 これらのタイプのエラーはクライアントに関連していますが、潜在的な問題をサーバー構成で修正できるかどうかを判断するには、ユーザーが直面しているエラーコードを知ることが役立つことがよくあります。
サーバーエラー、または500〜599のHTTPステータスコードは、エラーが発生したことを認識した場合、またはその他の方法で要求を処理できない場合に、Webサーバーによって返されます。
一般的なトラブルシューティングのヒント
- Webブラウザを使用してWebサーバーをテストする場合は、サーバーを変更した後にブラウザを更新してください
- サーバーがリクエストを処理する方法の詳細については、サーバーログを確認してください。 たとえば、ApacheやNginxなどのWebサーバーは、
access.log
とerror.log
という2つのファイルを生成し、関連情報をスキャンできます。 - HTTPステータスコード定義は、リクエストを処理するアプリケーションによって実装される標準の一部であることに注意してください。 つまり、返される実際のステータスコードは、サーバーソフトウェアが特定のエラーを処理する方法によって異なります。このガイドでは、通常、正しい方向を示します。
HTTPステータスコードの概要を理解したところで、一般的に発生するエラーについて見ていきます。
400不正な要求
400ステータスコードまたはBadRequest エラーは、サーバーに送信されたHTTPリクエストの構文が無効であることを意味します。
400BadRequestエラーが発生する可能性のあるいくつかの例を次に示します。
- サイトに関連付けられているユーザーのCookieが破損しています。 ブラウザのキャッシュとCookieをクリアすると、この問題を解決できる可能性があります
- ブラウザの障害による不正なリクエスト
- HTTPリクエストを手動で作成する際の人為的エラーによる不正なリクエスト(例:
curl
を誤って使用している)
401無許可
401ステータスコードまたはUnauthorizedエラーは、リソースにアクセスしようとしているユーザーが認証されていないか、正しく認証されていないことを意味します。 これは、保護されたリソースを表示できるようにするには、ユーザーが資格情報を提供する必要があることを意味します。
このNginxチュートリアルのように、ユーザーがHTTP認証で保護されているリソースにアクセスしようとすると、401Unauthorizedエラーが返されるシナリオの例があります。 この場合、ユーザーは、有効なユーザー名とパスワード(.htpasswd
ファイルに存在するもの)をWebサーバーに提供するまで、401応答コードを受け取ります。
403禁止します
403ステータスコードまたはForbiddenエラーは、ユーザーが有効なリクエストを行ったが、リクエストされたリソースにアクセスする権限がないため、サーバーがリクエストの提供を拒否していることを意味します。 予期せず403エラーが発生した場合は、ここで説明するいくつかの一般的な原因があります。
ファイルのアクセス許可
403エラーは通常、Webサーバープロセスを実行しているユーザーが、アクセスされているファイルを読み取るための十分な権限を持っていない場合に発生します。
403エラーのトラブルシューティングの例を示すために、次の状況を想定します。
- ユーザーが
http://example.com/index.html
からWebサーバーのインデックスファイルにアクセスしようとしています - Webサーバーワーカープロセスは、
www-data
ユーザーが所有しています - サーバーでは、インデックスファイルは
/usr/share/nginx/html/index.html
にあります。
ユーザーに403Forbidden エラーが発生する場合は、www-data
ユーザーにファイルを読み取るための十分な権限があることを確認してください。 通常、これは、ファイルのその他の権限を読み取りに設定する必要があることを意味します。 これを確実にする方法はいくつかありますが、この場合、次のコマンドが機能します。
sudo chmod o=r /usr/share/nginx/html/index.html
.htaccess
403エラーのもう1つの潜在的な原因は、多くの場合意図的に、.htaccess
ファイルの使用です。 .htaccess
ファイルは、たとえば、特定のIPアドレスまたは範囲への特定のリソースのアクセスを拒否するために使用できます。
ユーザーが予期せず403Forbiddenエラーを受け取った場合は、.htaccess
設定が原因ではないことを確認してください。
インデックスファイルが存在しません
ユーザーがデフォルトのインデックスファイルを持たないディレクトリにアクセスしようとしていて、ディレクトリリストが有効になっていない場合、Webサーバーは403Forbiddenエラーを返します。 たとえば、ユーザーがhttp://example.com/emptydir/
にアクセスしようとしていて、サーバーのemptydir
ディレクトリにインデックスファイルがない場合、403ステータスが返されます。
ディレクトリリストを有効にする場合は、Webサーバー構成で有効にすることができます。
404お探しのページが見つかりませんでした
404ステータスコード、または Not Found エラーは、ユーザーがサーバーと通信できるが、要求されたファイルまたはリソースを見つけることができないことを意味します。
404エラーは、さまざまな状況で発生する可能性があります。 ユーザーが予期せず404NotFoundエラーを受け取った場合は、トラブルシューティング中に尋ねる質問がいくつかあります。
- ユーザーをサーバーリソースに誘導したリンクに誤植がありますか?
- ユーザーが間違ったURLを入力しましたか?
- ファイルはサーバー上の正しい場所に存在しますか? サーバー上でリソースが移動または削除されましたか?
- サーバー構成に正しいドキュメントルートの場所がありますか?
- Webサーバーワーカープロセスを所有するユーザーには、要求されたファイルが存在するディレクトリに移動する権限がありますか? (ヒント:ディレクトリにアクセスするには、読み取りおよび実行のアクセス許可が必要です)
- アクセスされているリソースはシンボリックリンクですか? その場合は、Webサーバーがシンボリックリンクをたどるように構成されていることを確認してください
500内部サーバーエラー
500ステータスコード、または内部サーバーエラーは、サーバーが不明な理由で要求を処理できないことを意味します。 より具体的な5xxエラーがより適切な場合、このコードが表示されることがあります。
このエラーの最も一般的な原因は、サーバーの構成ミスです(例: 不正な形式の.htaccess
ファイル)または欠落しているパッケージ(例: PHPが正しくインストールされていない状態でPHPファイルを実行しようとしています)。
502不正なゲートウェイ
502ステータスコードまたはBadGateway エラーは、サーバーがゲートウェイまたはプロキシサーバーであり、実際に要求を満たす必要があるバックエンドサーバーから有効な応答を受信していないことを意味します。
問題のサーバーがロードバランサーなどのリバースプロキシサーバーである場合は、次の点を確認してください。
- バックエンドサーバー(HTTP要求が転送される場所)は正常です
- 適切なバックエンドが指定された状態で、リバースプロキシが適切に構成されている
- バックエンドサーバーとリバースプロキシサーバー間のネットワーク接続は正常です。 サーバーが他のポートで通信できる場合は、ファイアウォールがサーバー間のトラフィックを許可していることを確認してください
- Webアプリケーションがソケットをリッスンするように構成されている場合は、ソケットが正しい場所に存在し、適切なアクセス許可を持っていることを確認してください
503サービスを利用できません
503ステータスコードまたはServiceUnavailable エラーは、サーバーが過負荷になっているか、メンテナンス中であることを意味します。 このエラーは、サービスがいつか利用可能になるはずであることを意味します。
サーバーがメンテナンス中でない場合は、サーバーにすべての着信要求を処理するのに十分なCPUまたはメモリリソースがないか、より多くのユーザー、スレッド、またはプロセスを許可するようにWebサーバーを構成する必要があることを示している可能性があります。
504ゲートウェイのタイムアウト
504ステータスコードまたはGatewayTimeout エラーは、サーバーがゲートウェイまたはプロキシサーバーであり、許可された期間内にバックエンドサーバーから応答を受信していないことを意味します。
これは通常、次の状況で発生します。
- サーバー間のネットワーク接続が不十分です
- パフォーマンスが低いため、要求を実行しているバックエンドサーバーが遅すぎます
- ゲートウェイまたはプロキシサーバーのタイムアウト期間が短すぎます
結論
これで、最も一般的なHTTPエラーコードとそれらのコードの一般的な解決策に精通しているので、Webサーバーまたはアプリケーションの問題をトラブルシューティングするための適切な基礎が得られるはずです。
このガイドに記載されていないエラーコードが発生した場合、または説明されたものに対する他の考えられる解決策を知っている場合は、コメントでそれらについて自由に話し合ってください。