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

提供:Dev Guides
移動先:案内検索

序章

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ディストリビューションには必ず正しい名前を使用してください。


systemctlApacheのコマンド

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コマンドを使用してさらにトラブルシューティングできます。

journalctlApacheのコマンド

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から派生したシステムのトラブルシューティングを行っている場合は、taillessなどのツールを使用して、/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を使用するときに発生する可能性のあるいくつかの一般的なエラーについて詳しく説明します。