序章

Apache AH00526: Syntax errorメッセージは、Apache構成ファイルのどこかにタイプミスまたは設定ミスがある場合に発生します。 これは一般的なエラーであり、根本的な問題の数を示している可能性があります。

無効な構成がロードされる前に、apachectl configtestを使用してエラーを検出できます。 systemctlおよびjournalctlコマンドを使用して見つけることもできます。 後者の2つのケースでは、エラーのためにApacheを実行できません。

apachectlを使用してエラーを検出した場合は、このチュートリアルの組み込みのapachectlコマンドを使用したトラブルシューティングセクションにスキップしてください。 それ以外の場合は、次のセクションでsystemctlを使用してエラーのトラブルシューティングを行う方法について説明します。

systemctlを使用したトラブルシューティング

このシリーズの冒頭にある一般的なApacheエラーのトラブルシューティング方法チュートリアルのトラブルシューティング手順に従って、AH00526エラーのトラブルシューティングを行う最初の手順は、systemctlでApacheのステータスを確認することです。 エラーが実行中のプロセスに影響を与えるのか、それともApacheの起動を妨げているのかを理解することが重要です。

UbuntuおよびDebianから派生したLinuxディストリビューションで、以下を実行してApacheのステータスを確認します。

UbuntuとDebianシステム
  1. sudo systemctl status apache2.service -l --no-pager

CentOSおよびFedoraシステムでは、次のコマンドを使用してApacheのステータスを調べます。

CentOSおよびFedoraシステム
  1. sudo systemctl status httpd.service -l --no-pager

-lフラグは、systemctlが長い行を楕円()に置き換えるのではなく、行の内容全体を出力することを保証します。 --no-pagerフラグは、一度にコンテンツの画面のみを表示するlessのようなツールを呼び出さずに、ログ全体を画面に出力します。

AH00526: Syntax errorメッセージのトラブルシューティングを行っているため、次のような出力が表示されます。

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: failed (Result: exit-code) since Wed 2020-07-15 13:45:49 UTC; 1min 37s ago . . . Jul 15 13:45:49 f17f01056c5b systemd[1]: Starting The Apache HTTP Server... Jul 15 13:45:49 f17f01056c5b apachectl[15860]: AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/000-default.conf: Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Invalid command 'SSSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Action 'start' failed. Jul 15 13:45:49 f17f01056c5b apachectl[15860]: The Apache error log may have more information. Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Control process exited, code=exited status=1 Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Failed with result 'exit-code'. Jul 15 13:45:49 f17f01056c5b systemd[1]: Failed to start The Apache HTTP Server.

この場合、構文エラーのためにApacheは実行されていません。 このエラーは、/etc/apache2/sites-enabled/000-default.confファイルのSSSLCertificateFile行の先頭にある余分なS文字が原因で発生します。 正しいディレクティブはSSLCertificateFileである必要があるため、この例のディレクティブ名を修正するためにファイルを編集すると、エラーが解決され、Apacheを起動できるようになります。

この例のsystemctl出力には、systemdジャーナルからの行も含まれています。 出力が構成ファイルの特定の行が構文エラーを生成していることを示している場合は、journalctlおよびapachectl configtestのトラブルシューティング手順をスキップできます。 代わりに、ファイルに直接移動して、エラーのある行を調べて編集し、エラーを解決することができます。

出力にApacheの構成ファイル内のエラーの場所に関する特定の情報が含まれていない場合は、systemdログからのjournalctl出力を調べる必要があります。 次のセクションでは、journalctlを使用してAH00526エラーのトラブルシューティングを行う方法について説明します。

journalctlログを使用したトラブルシューティング

systemctl出力にAH00526構文エラーの詳細が含まれていない場合は、journalctlコマンドを使用して、Apacheのsystemdログを調べることができます。

UbuntuおよびDebianから派生したシステムでは、次のコマンドを実行します。

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

CentOS、Fedora、およびRedHatから派生したシステムでは、次のコマンドを使用してログを検査します。

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

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

Apache構成でAH00526エラーが発生した場合は、journalctlコマンド出力で次のような行を探してください。

Output
-- Logs begin at Tue 2019-11-05 21:26:44 UTC, end at Tue 2020-06-09 15:13:01 UTC. -- . . . Jun 09 15:12:28 f17f01056c5b apachectl[3157]: AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf: Jun 09 15:12:28 f17f01056c5b apachectl[3157]: Invalid command 'SSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration . . .

出力の最初の行はAH00526エラーです。 このエラーは、構成ファイルの無効な設定またはタイプミスに関連する一般的なエラーであるため、次の行でエラーの原因を説明します。 この場合、これはSSLCertificateFileと呼ばれるディレクティブであり、sslモジュールが有効になっている場合にのみ有効です。

無効なSSLCertificateFileディレクティブに関連するAH00526エラーが発生した場合は、sslモジュールを有効にしてから、Apacheを再起動してエラーを解消することで解決できます。

UbuntuおよびDebianシステムの場合、以下を実行してモジュールを有効にします。

  1. sudo a2enmod ssl
  2. sudo systemctl restart apache2.service

CentOSおよびFedoraシステムでは、mod_sslパッケージがインストールされていることを確認してから、次のようなファイルでApacheの/etc/httpd/conf.modules.dディレクトリにモジュールを追加してモジュールをロードします。

  1. sudo yum install mod_ssl
  2. echo "LoadModule ssl_module modules/mod_ssl.so" | sudo tee > /etc/httpd/conf.modules.d/00-ssl.conf
  3. sudo systemctl restart httpd.service

モジュールがApacheによって参照され、Linuxディストリビューションに適したコマンドを使用してモジュールを再起動すると、構成にエラーがなくなるとサーバーが起動します。

ただし、さらにエラーが発生した場合、Apacheとsystemctl statusは引き続きエラーを報告し、サーバーを起動できない理由を説明しようとします。 systemctlは、UbuntuおよびDebianシステムで次のようなエラーメッセージを出力します。

UbuntuとDebianの出力
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details

また、CentOS、Fedora、およびRedHatから派生したシステムでは、失敗した起動メッセージは次のようになります。

CentOSとFedoraの出力
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.

エラーが原因でApacheが起動しない場合は、apachectl configtestコマンドを使用すると、問題を診断するための最も効率的で効果的な方法になります。 次のセクションでは、ユーティリティを使用して、無効なSSLCertificateFileディレクティブに再び関連するAH00526エラーを解決する方法について説明します。

apachectlを使用したトラブルシューティング

ApacheのapachectlユーティリティでAH00526エラーをトラブルシューティングするには、configtestサブコマンドを使用してApache構成をテストできます。 このツールは、Apacheファイルを解析して、それが有効かどうかを判断し、有効でない場合は、Apache構成で誤った設定を見つけます。

apachectl configtestコマンドは、新しい構成でapacheをリロードする前に構文エラーをキャッチするのに役立ちます。 このテストは、Apacheファイルの設定が誤っている場合にサービスの停止を回避するのに役立ちます。

次の設定テストコマンドの例は、AH00526 Syntax errorメッセージを返し、Apacheが空のSSLCertificateFileを参照していることが問題の可能性があることを説明しています。

  1. sudo apachectl configtest
Output
AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf: SSLCertificateFile: file '/etc/ssl/certs/example.com.pem' does not exist or is empty

この出力例では、エラーメッセージの注記として/etc/ssl/certs/example.com.pemファイルは存在しません。 ファイルにSSL/TLS証明書を追加するか、ディレクティブを削除すると、問題が解決します。

apachectl configtestの呼び出しが成功すると、次のような出力が得られます。

Output
Syntax OK

結論

このチュートリアルでは、ApacheAH00526構文エラーのトラブルシューティング方法を学習しました。 Apacheエラーを調査するときの最初のステップは、Linuxディストリビューションに応じてsystemctl status apache2またはsystemctl status httpdでサーバーのステータスを調べることです。 そこから、Apacheが正しく実行されているかどうか、またはエラーが原因で起動できないかどうかを判断できます。

Apacheのステータスを確認したら、journalctlを使用してさらに診断し、プロセスのsystemdログを調べることができます。 apachectl configtestコマンドを使用して、構成ファイルのエラーを直接確認することもできます。