前書き

Webサーバーまたはアプリケーションにアクセスすると、サーバーが受信したすべてのHTTP要求にHTTPステータスコードで応答します。 HTTPステータスコードは3桁のコードであり、5つの異なるクラスにグループ化されます。 ステータスコードのクラスは、最初の数字ですばやく識別できます。

  • 1xx:情報

  • 2xx:成功

  • 3xx:リダイレクト

  • 4xx:クライアントエラー

  • 5xx:サーバーエラー

このガイドでは、最も一般的に発生するHTTP *エラー*コードの特定とトラブルシューティングに焦点を当てています。 システム管理者の観点から、4xxおよび5xxステータスコード。 Webサーバーが特定のエラーコードでリクエストに応答する原因となる多くの状況があります。一般的な潜在的な原因と解決策について説明します。

クライアントとサーバーのエラーの概要

クライアントエラー、つまり400から499までのHTTPステータスコードは、ユーザークライアントによって送信されたHTTPリクエストの結果です(つまり、 Webブラウザーまたはその他のHTTPクライアント)。 これらのタイプのエラーはクライアントに関連していますが、サーバー構成によって潜在的な問題を修正できるかどうかを判断するために、ユーザーが遭遇しているエラーコードを知ることはしばしば役立ちます。

サーバーエラー、つまり500から599のHTTPステータスコードは、エラーが発生したか、リクエストを処理できない場合にWebサーバーから返されます。

一般的なトラブルシューティングのヒント

  • Webブラウザーを使用してWebサーバーをテストする場合は、サーバーを変更した後にブラウザーを更新します

  • サーバーがリクエストを処理する方法の詳細については、サーバーログを確認してください。 たとえば、ApacheやNginxなどのWebサーバーは、関連情報をスキャンできる「+ access.log 」と「 error.log +」という2つのファイルを生成します

  • HTTPステータスコードの定義は、要求を処理するアプリケーションによって実装される標準の一部であることに注意してください。 つまり、返される実際のステータスコードは、サーバーソフトウェアが特定のエラーをどのように処理するかによって異なります。このガイドでは、一般的に正しい方向を示す必要があります。

HTTPステータスコードの高度な理解が得られたので、よく発生するエラーについて説明します。

[[400-bad-request]]
=== 400不正な要求

400ステータスコード、または_Bad Request_エラーは、サーバーに送信されたHTTP要求の構文が無効であることを意味します。

以下に、400 Bad Requestエラーが発生する可能性のあるいくつかの例を示します。

  • サイトに関連付けられているユーザーのCookieが破損しています。 ブラウザのキャッシュとCookieをクリアすると、この問題を解決できる場合があります

  • ブラウザーの障害による不正なリクエスト

  • HTTPリクエストを手動で作成する際の人為的エラーによる不正なリクエスト(例: `+ curl +`を誤って使用する)

[[401-unauthorized]]
=== 401未承認

401ステータスコード、または_Unauthorized_エラーは、リソースにアクセスしようとしているユーザーが認証されていないか、正しく認証されていないことを意味します。 これは、ユーザーが保護されたリソースを表示できるようにするために資格情報を提供する必要があることを意味します。

401 Unauthorizedエラーが返されるシナリオの例は、https://www.digitalocean.com/community/tutorials/how-to-set-upのように、ユーザーがHTTP認証によって保護されているリソースにアクセスしようとした場合です。 -http-authentication-with-nginx-on-ubuntu-12-10 [このNginxチュートリアル]。 この場合、ユーザーは有効なユーザー名とパスワード( `+ .htpasswd +`ファイルに存在するもの)をWebサーバーに提供するまで401応答コードを受け取ります。

[[403-forbidden]]
=== 403禁止します

403ステータスコード、または_Forbidden_​​エラーは、ユーザーが有効なリクエストを行ったが、リクエストされたリソースにアクセスする権限がないため、サーバーがリクエストの処理を拒否していることを意味します。 403エラーが予期せず発生する場合、ここで説明するいくつかの一般的な原因があります。

ファイル許可

403エラーは通常、Webサーバープロセスを実行しているユーザーに、アクセス中のファイルを読み取るための十分な権限がない場合に発生します。

403エラーのトラブルシューティングの例を示すために、次の状況を想定します。

  • ユーザーは、 `+ http:// example.com / index.html +`からウェブサーバーのインデックスファイルにアクセスしようとしています

  • Webサーバーのワーカープロセスは、 `+ www-data`ユーザーが所有しています

  • サーバーでは、インデックスファイルは `+ / usr / share / nginx / html / index.html`にあります

ユーザーが403 Forbiddenエラーを受け取っている場合は、 `+ www-data`ユーザーにファイルを読み取るための十分な権限があることを確認してください。 通常、これは、ファイルの_other permissions_を_read_に設定する必要があることを意味します。 これを保証する方法はいくつかありますが、この場合は次のコマンドが機能します。

sudo chmod o=r /usr/share/nginx/html/index.html

.htaccess

403エラーの別の潜在的な原因は、多くの場合意図的に、 `+ .htaccess`ファイルの使用です。 たとえば、 `+ .htaccess +`ファイルを使用して、特定のリソースの特定のIPアドレスまたは範囲へのアクセスを拒否できます。

ユーザーが予期せず403 Forbiddenエラーを受け取っている場合は、 `+ .htaccess +`設定が原因でないことを確認してください。

インデックスファイルが存在しません

ユーザーがデフォルトのインデックスファイルを持たないディレクトリにアクセスしようとして、ディレクトリ一覧が有効になっていない場合、Webサーバーは403 Forbiddenエラーを返します。 たとえば、ユーザーが `+ http:// example.com / emptydir / `にアクセスしようとしており、サーバーの ` emptydir +`ディレクトリにインデックスファイルがない場合、403ステータスが返されます。

ディレクトリ一覧を有効にする場合は、Webサーバー構成で有効にすることができます。

[[404-not-found]]
=== 404お探しのページが見つかりませんでした

404ステータスコード、または_Not Found_エラーは、ユーザーがサーバーと通信できるが、要求されたファイルまたはリソースを見つけることができないことを意味します。

404エラーは、さまざまな状況で発生する可能性があります。 ユーザーが予期せず404 Not Foundエラーを受け取った場合、トラブルシューティング中に次の質問をしてください。

  • ユーザーをサーバーリソースに誘導したリンクに誤植がありますか?

  • ユーザーが間違ったURLを入力しましたか?

  • ファイルはサーバー上の正しい場所に存在しますか? リソースがサーバー上で移動または削除されましたか?

  • サーバー構成に正しいドキュメントルートの場所がありますか?

  • Webサーバーワーカープロセスを所有するユーザーは、要求されたファイルが存在するディレクトリに移動する権限を持っていますか? (ヒント:ディレクトリにアクセスするには、読み取り権限と実行権限が必要です)

  • アクセスされているリソースはシンボリックリンクですか? その場合、Webサーバーがシンボリックリンクをたどるように構成されていることを確認してください

[[500-internal-server-error]]
=== 500内部サーバーエラー

500ステータスコード、または_Internal Server Error_は、不明な理由でサーバーがリクエストを処理できないことを意味します。 より具体的な5xxエラーがより適切な場合に、このコードが表示されることがあります。

このエラーの最も一般的な原因は、サーバーの構成ミスです(例: 不正な形式の `+ .htaccess +`ファイル)または欠落しているパッケージ(例: PHPが正しくインストールされていない状態でPHPファイルを実行しようとしています)。

[[502-bad-gateway]]
=== 502不正なゲートウェイ

502ステータスコード、または_Bad Gateway_エラーは、サーバーがゲートウェイまたはプロキシサーバーであり、実際に要求を満たす必要があるバックエンドサーバーから有効な応答を受信して​​いないことを意味します。

問題のサーバーがロードバランサーなどのリバースプロキシサーバーである場合は、次の点を確認してください。

  • バックエンドサーバー(HTTP要求の転送先)は正常です

  • リバースプロキシが適切に構成され、適切なバックエンドが指定されている

  • バックエンドサーバーとリバースプロキシサーバー間のネットワーク接続は正常です。 サーバーが他のポートで通信できる場合は、ファイアウォールがそれらの間のトラフィックを許可していることを確認してください

  • Webアプリケーションがソケットをリッスンするように構成されている場合は、ソケットが正しい場所に存在し、適切なアクセス許可があることを確認してください

[[503-service-unavailable]]
=== 503サービスは利用できません

503ステータスコード、または_Service Unavailable_エラーは、サーバーが過負荷になっているか、メンテナンス中であることを意味します。 このエラーは、ある時点でサービスが利用可能になることを意味します。

サーバーがメンテナンス中でない場合、これは、サーバーにすべての着信要求を処理するのに十分なCPUまたはメモリリソースがないこと、またはより多くのユーザー、スレッド、またはプロセスを許可するようにWebサーバーを構成する必要があることを示します。

[[504-gateway-timeout]]
=== 504ゲートウェイのタイムアウト

504ステータスコード、または_Gateway Timeout_エラーは、サーバーがゲートウェイまたはプロキシサーバーであり、許可された期間内にバックエンドサーバーから応答を受信して​​いないことを意味します。

これは通常、次の状況で発生します。

  • サーバー間のネットワーク接続が悪い

  • パフォーマンスを低下させるため、リクエストを処理しているバックエンドサーバーが遅すぎます

  • ゲートウェイまたはプロキシサーバーのタイムアウト時間が短すぎます

結論

最も一般的なHTTPエラーコードとそれらのコードの一般的な解決策を理解したので、Webサーバーまたはアプリケーションの問題をトラブルシューティングするための適切な基盤が必要です。

このガイドに記載されていないエラーコードが発生した場合、または説明されている他の解決策を知っている場合は、コメントで自由に議論してください!