開発者ドキュメント

一般的なApacheエラーのトラブルシューティング方法

序章

3つの主要なコマンドと、Apacheエラーのトラブルシューティングを開始するために使用できる一連の一般的なログの場所があります。 通常、Apacheのトラブルシューティングを行うときは、ここに示されている順序でこれらのコマンドを使用してから、ログファイルで特定の診断データを調べます。

ほとんどのLinuxディストリビューションでApacheのトラブルシューティングに一般的に使用するコマンドは次のとおりです。

これらのコマンド、それらの使用方法、およびエラーに関する追加情報を見つけることができるApacheのログの場所については、次のセクションでさらに詳しく説明します。

:DebianおよびUbuntuシステムでは、Apacheサービスとプロセス名は apache2、CentOS、Fedora、およびその他のRedHatから派生したシステムでは、Apacheのサービスとプロセスの名前は httpd. サービス名と実行中のプロセス名の違いは別として、Apacheのステータスの開始、停止、確認、および journalctl を使用するすべてのLinuxシステムで同じように動作するはずです systemd Apacheサービスを管理します。 Linuxディストリビューションには必ず正しい名前を使用してください。

systemctl Apacheのコマンド

を使用して一般的なApacheエラーをトラブルシューティングするには systemd サービスマネージャーの最初のステップは、システム上のApacheプロセスの状態を検査することです。 以下 systemctl コマンドはクエリを実行します systemd Apacheのプロセスの状態について。

UbuntuおよびDebianシステムでは以下が実行されます:

  1. sudo systemctl status apache2.service -l --no-pager

The -l フラグは、出力が切り捨てられたり省略されたりしないようにします。 The --no-pager フラグを使用すると、出力を表示するためにユーザー側での操作を必要とせずに、出力が端末に直接送信されるようになります。 次のような出力を受け取るはずです。

Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Mon 2020-07-13 14:43:35 UTC; 1 day 4h ago Process: 929 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 1346 (apache2) Tasks: 55 (limit: 4702) CGroup: /system.slice/apache2.service ├─1346 /usr/sbin/apache2 -k start . . .

CentOSおよびFedoraシステムでApacheプロセスを検査するには、以下を実行します。

  1. sudo systemctl status httpd.service -l --no-pager

次のような出力を受け取るはずです。

Output
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-07-14 19:46:52 UTC; 3s ago Docs: man:httpd.service(8) Main PID: 21217 (httpd) Status: "Started, listening on: port 80" Tasks: 213 (limit: 2881) Memory: 16.6M CGroup: /system.slice/httpd.service ├─21217 /usr/sbin/httpd -DFOREGROUND . . . Jul 14 19:46:52 localhost.localdomain httpd[21217]: Server configured, listening on: port 80

いずれの場合も、 Active 出力の行。 Apacheサーバーが表示されない場合 active (running) 前の例で強調表示されているように、当然のことですが、エラーが発生している可能性があります。 通常、問題がある場合は、出力に次のような行が表示されます(強調表示されていることに注意してください)。 failed 部分):

Example Error Output
Active: failed (Result: exit-code) since Tue 2020-07-14 20:01:29 UTC; 1s ago

Apacheのプロセスまたは構成に問題がある場合は、 journalctl 指図。

journalctl Apacheのコマンド

検査するには systemd Apacheのログ、あなたは使用することができます journalctl 指図。 The systemd Apacheのログは通常、Apacheプロセスの開始または管理に問題があるかどうかを示します。

これらのログは、Apacheの要求ログおよびエラーログとは別のものです。 journalctl からのログを表示します systemd 起動からシャットダウンまでのApacheサービス自体と、途中で発生する可能性のあるプロセスエラーについて説明します。

UbuntuおよびDebianシステムでは、次のコマンドを使用してログを調べます。

  1. sudo journalctl -u apache2.service --since today --no-pager

The --since today フラグは、コマンドの出力を、当日の00:00:00から始まるエントリをログに記録するように制限します。 このオプションを使用すると、エラーをチェックするときに調べる必要のあるログエントリの量を制限するのに役立ちます。 次のような出力を受け取るはずです。

Output
Jul 14 20:12:14 ubuntu2004 systemd[1]: Starting The Apache HTTP Server... Jul 14 20:12:14 ubuntu2004 systemd[1]: Started The Apache HTTP Server.

CentOSまたはFedoraベースのシステムを使用している場合は、次のバージョンのコマンドを使用します。

  1. sudo journalctl -u httpd.service --since today --no-pager

次のような出力を受け取るはずです。

Output
Jul 14 20:13:09 centos8 systemd[1]: Starting The Apache HTTP Server... . . . Jul 14 20:13:10 centos8 httpd[21591]: Server configured, listening on: port 80

エラーが発生した場合、出力に次のような行が表示されますが、Linuxディストリビューション間の主な違いが強調表示されています yourhostname 部分:

Example Error Output
Jul 14 20:13:37 yourhostname systemd[1]: Failed to start The Apache HTTP Server.

Apacheサーバーにエラーがある場合 journalctl 前の例のようにログを記録した場合、考えられる問題をトラブルシューティングするための次のステップは、Apacheの構成を調査することです。 apachectl コマンドラインツール。

トラブルシューティング apachectl

ほとんどのLinuxディストリビューションには apachectl Apacheでのユーティリティ。 apachectl は、Apache構成の問題を検出および診断するのに役立つ非常に貴重なツールです。

を使用して問題をトラブルシューティングするには apachectl、を使用してApache構成をテストします apachectl configtest 指図。 このツールは、サーバーを起動する前に、Apacheファイルを解析し、エラーや欠落している設定を検出します。

Ubuntu、Debian、CentOS、およびFedoraベースのディストリビューションで次のようなコマンドを実行します。

  1. sudo apachectl configtest

Apache構成が機能すると、次のような出力が得られます。

Output
Syntax OK

Linuxディストリビューションによっては、出力に他の行が混在している場合がありますが、重要な行は次のような行です。 Syntax OK.

有効になっていないモジュールを参照するディレクティブや単一のタイプミスなど、Apache構成にエラーがある場合は、 apachectl それを検出し、問題について通知しようとします。

たとえば、有効になっていないApacheモジュールにディレクティブを使用しようとすると、次のようになります。 apachectl configtest 次のようなメッセージ:

Example Error Output
AH00526: Syntax error on line 232 of /etc/apache2/apache2.conf: Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration Action 'configtest' failed. The Apache error log may have more information.

この例では、 ssl モジュールが有効になっていないため、 SSLEngine ディレクティブは、構成のテスト時にエラーを生成します。 最後の行はまた、 The Apache error log may have more information、これは、より詳細なデバッグ情報を探すための次の場所です。

Apacheログファイル

Apacheログファイルは、トラブルシューティングに非常に役立つリソースです。 通常、ブラウザまたはその他のHTTPクライアントで発生したエラーは、Apacheのログに対応するエントリがあります。 Apacheは、構成、組み込みモジュール、およびその他のデバッグ情報に関連するエラーをログファイルに出力する場合もあります。

Fedora、CentOS、またはRedHatサーバーでApacheのトラブルシューティングを行う際にログファイルのエラーを調べるには、 /var/log/httpd/error_log ファイル。

DebianまたはUbuntuから派生したシステムのトラブルシューティングを行っている場合は、調べてください /var/log/apache2/error.log 次のようなツールを使用したエラーの場合 tail また less. たとえば、を使用してエラーログの最後の2行を表示するには tail、次のコマンドを実行します。

  1. sudo tail -n 2 /var/log/apache2/error.log

調べたい行数を番号に置き換えてください 2 コマンドで。 CentOSまたはFedoraシステムでは、調べるログファイルは次のとおりです。 /var/log/httpd/error_log.

エラーの例は、Apacheサーバーの実行に使用しているLinuxディストリビューションに関係なく、次の行のようになります。

Error Log Examples
[Wed Jul 15 01:34:12.093005 2020] [proxy:error] [pid 13949:tid 140150453516032] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:9090 (127.0.0.1) failed [Wed Jul 15 01:34:12.093078 2020] [proxy_http:error] [pid 13949:tid 140150453516032] [client 127.0.0.1:42480] AH01114: HTTP: failed to make connection to backend: 127.0.0.1

この出力の2行は、別個のエラーメッセージです。 どちらもエラーの原因となっているモジュールを参照しています(proxy 最初の行で、 proxy_http 2番目の)で、モジュールに固有のエラーコードを含めます。 最初の1つ、 AH00957は、Apacheサーバーがバックエンドサーバー(この場合はポート9090の127.0.0.1)に接続しようとしたことを示します。 proxy モジュールがそうすることができませんでした。

2番目のエラーは最初のエラーから派生しています:AH01114は proxy_http モジュールエラー。これは、Apacheが構成済みのバックエンドサーバーに接続してHTTP要求を行うことができなかったことも示します。

これらの例の行は、説明のみを目的としています。 Apacheサーバーでエラーを診断している場合、ログのエラー行の内容がこれらとは異なる可能性があります。 Linuxディストリビューションに関係なく、ログ内のエラー行の形式には、関連するApacheモジュールとエラーコード、およびエラーのテキスト説明が含まれます。

Apacheサーバーで問題を引き起こしている可能性があるものがわかったら、問題の調査とトラブルシューティングを続けることができます。 エラーコードとテキストの説明は、問題の考えられる原因の範囲を絞り込むために使用できる明示的で具体的な用語を提供するため、特に役立ちます。

結論

Apacheエラーのトラブルシューティングは、サービス自体のエラーの診断から、モジュールの誤って構成されたオプションの特定、またはカスタマイズされたアクセス制御ルールの詳細な調査にまで及ぶ可能性があります。 Apacheの問題を診断するためのこの紹介では、エラーの考えられる原因を絞り込むために多くのユーティリティを使用する方法を説明しました。 通常、これらのユーティリティは同じ順序で使用しますが、いつでもスキップすることも、問題の概要がわかっている場合はログの調査から直接開始することもできます。

ただし、トラブルシューティングの一般的な手順として、これらのツールを説明されている順序で系統的に使用することが役立ちます。 トラブルシューティングを開始します systemctl Apacheサーバーの状態を調べます。 さらに情報が必要な場合は、 systemd を使用したApacheのログ journalctl 指図。 チェックしても問題が解決しない場合 journalctl、を使用してApacheの構成をテストする apachectl configtest 次のステップです。 最後に、詳細なトラブルシューティングのために、Apacheのログファイルを調べると、通常、有用な診断メッセージとエラーコードとともに特定のエラーが示されます。

このシリーズの残りのチュートリアルでは、Apacheを使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。

モバイルバージョンを終了