一般的なApacheエラーのトラブルシューティング方法
序章
3つの主要なコマンドと、Apacheエラーのトラブルシューティングを開始するために使用できる一連の一般的なログの場所があります。 通常、Apacheのトラブルシューティングを行うときは、ここに示されている順序でこれらのコマンドを使用してから、ログファイルで特定の診断データを調べます。
ほとんどのLinuxディストリビューションでApacheのトラブルシューティングに一般的に使用するコマンドは次のとおりです。
systemctl
-systemd
サービスマネージャーを介してLinuxサービスを制御および操作するために使用されます。journalctl
-systemd
によって生成されたログを照会および表示するために使用されます。apachectl
-トラブルシューティング時に、このコマンドを使用してApacheの構成を確認します。
これらのコマンド、それらの使用方法、およびエラーに関する追加情報を見つけることができるApacheのログの場所については、次のセクションでさらに詳しく説明します。
注:DebianおよびUbuntuシステムでは、Apacheサービスおよびプロセス名はapache2
ですが、CentOS、Fedora、およびその他のRedHat派生システムでは、Apacheのサービスおよびプロセス名はhttpd
。 サービス名と実行中のプロセス名の違いを除けば、Apacheのステータスの開始、停止、確認、およびjournalctl
のログは、systemd
を使用して管理するすべてのLinuxシステムで同じように機能するはずです。 Apacheサービス。 Linuxディストリビューションには必ず正しい名前を使用してください。
systemctl
Apacheのコマンド
systemd
サービスマネージャーを使用して一般的なApacheエラーのトラブルシューティングを行うための最初のステップは、システム上のApacheプロセスの状態を検査することです。 次のsystemctl
コマンドは、systemd
にApacheのプロセスの状態を照会します。
UbuntuおよびDebianシステムでは以下が実行されます:
sudo systemctl status apache2.service -l --no-pager
-l
フラグは、出力が切り捨てられたり省略されたりしないようにします。 --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のコマンド
Apacheのsystemd
ログを調べるには、journalctl
コマンドを使用できます。 Apacheのsystemd
ログは通常、Apacheプロセスの開始または管理に問題があるかどうかを示します。
これらのログは、Apacheの要求ログおよびエラーログとは別のものです。 journalctl
は、systemd
からのログを表示します。このログには、起動からシャットダウンまでのApacheサービス自体と、途中で発生する可能性のあるプロセスエラーが記述されています。
UbuntuおよびDebianシステムでは、次のコマンドを使用してログを調べます。
sudo journalctl -u apache2.service --since today --no-pager
--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
ログにエラーがある場合、考えられる問題をトラブルシューティングする次のステップは、apachectl
コマンドラインツールを使用してApacheの構成を調査することです。
apachectl
を使用したトラブルシューティング
ほとんどのLinuxディストリビューションには、Apacheを備えたapachectl
ユーティリティが含まれています。 apachectl
は、Apache構成の問題を検出および診断するのに役立つ非常に貴重なツールです。
apachectl
を使用して問題をトラブルシューティングするには、apachectl configtest
コマンドを使用してApache構成をテストします。 このツールは、サーバーを起動する前に、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から派生したシステムのトラブルシューティングを行っている場合は、tail
やless
などのツールを使用して、/var/log/apache2/error.log
のエラーを調べてください。 たとえば、tail
を使用してエラーログの最後の2行を表示するには、次のコマンドを実行します。
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行は、別個のエラーメッセージです。 これらは両方とも、エラーの原因となっているモジュールを参照し(1行目はproxy
、2行目はproxy_http
)、モジュールに固有のエラーコードを含んでいます。 最初のAH00957
は、Apacheサーバーがproxy
モジュールを使用してバックエンドサーバー(この場合はポート9090の127.0.0.1)に接続しようとしたが失敗したことを示しています。
2番目のエラーは最初のエラーから派生しています。AH01114はproxy_http
モジュールエラーであり、Apacheが構成済みのバックエンドサーバーに接続してHTTP要求を行うことができなかったことも示します。
これらの例の行は、説明のみを目的としています。 Apacheサーバーでエラーを診断している場合、ログのエラー行の内容がこれらとは異なる可能性があります。 Linuxディストリビューションに関係なく、ログ内のエラー行の形式には、関連するApacheモジュールとエラーコード、およびエラーのテキスト説明が含まれます。
Apacheサーバーで問題を引き起こしている可能性があるものがわかったら、問題の調査とトラブルシューティングを続けることができます。 エラーコードとテキストの説明は、問題の考えられる原因の範囲を絞り込むために使用できる明示的で具体的な用語を提供するため、特に役立ちます。
結論
Apacheエラーのトラブルシューティングは、サービス自体のエラーの診断から、モジュールの誤って構成されたオプションの特定、またはカスタマイズされたアクセス制御ルールの詳細な調査にまで及ぶ可能性があります。 Apacheの問題を診断するためのこの紹介では、エラーの考えられる原因を絞り込むために多くのユーティリティを使用する方法を説明しました。 通常、これらのユーティリティは同じ順序で使用しますが、いつでもスキップすることも、問題の概要がわかっている場合はログの調査から直接開始することもできます。
ただし、トラブルシューティングの一般的な手順として、これらのツールを説明されている順序で系統的に使用することが役立ちます。 systemctl
でトラブルシューティングを開始して、Apacheサーバーの状態を調べます。 さらに詳しい情報が必要な場合は、journalctl
コマンドを使用して、Apacheのsystemd
ログを調べてください。 journalctl
を確認しても問題が解決しない場合は、apachectl configtest
を使用してApacheの構成をテストすることが次のステップです。 最後に、詳細なトラブルシューティングのために、Apacheのログファイルを調べると、通常、有用な診断メッセージとエラーコードとともに特定のエラーが示されます。
このシリーズの残りのチュートリアルでは、Apacheを使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。