一般的なApacheエラーのトラブルシューティング方法
序章
3つの主要なコマンドと、Apacheエラーのトラブルシューティングを開始するために使用できる一連の一般的なログの場所があります。 通常、Apacheのトラブルシューティングを行うときは、ここに示されている順序でこれらのコマンドを使用してから、ログファイルで特定の診断データを調べます。
ほとんどのLinuxディストリビューションでApacheのトラブルシューティングに一般的に使用するコマンドは次のとおりです。
systemctl
-Linuxサービスを介して制御および対話するために使用されますsystemd
サービスマネージャ。journalctl
-によって生成されたログを照会および表示するために使用されますsystemd
.apachectl
-トラブルシューティングの際、このコマンドは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システムでは以下が実行されます:
- 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プロセスを検査するには、以下を実行します。
- 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 OutputActive: 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システムでは、次のコマンドを使用してログを調べます。
- sudo journalctl -u apache2.service --since today --no-pager
The --since today
フラグは、コマンドの出力を、当日の00:00:00から始まるエントリをログに記録するように制限します。 このオプションを使用すると、エラーをチェックするときに調べる必要のあるログエントリの量を制限するのに役立ちます。 次のような出力を受け取るはずです。
OutputJul 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ベースのシステムを使用している場合は、次のバージョンのコマンドを使用します。
- sudo journalctl -u httpd.service --since today --no-pager
次のような出力を受け取るはずです。
OutputJul 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 OutputJul 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ベースのディストリビューションで次のようなコマンドを実行します。
- sudo apachectl configtest
Apache構成が機能すると、次のような出力が得られます。
OutputSyntax OK
Linuxディストリビューションによっては、出力に他の行が混在している場合がありますが、重要な行は次のような行です。 Syntax OK
.
有効になっていないモジュールを参照するディレクティブや単一のタイプミスなど、Apache構成にエラーがある場合は、 apachectl
それを検出し、問題について通知しようとします。
たとえば、有効になっていないApacheモジュールにディレクティブを使用しようとすると、次のようになります。 apachectl configtest
次のようなメッセージ:
Example Error OutputAH00526: 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
、次のコマンドを実行します。
- 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を使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。