Apacheの設定エラーAH00558:サーバーの完全修飾ドメイン名を確実に判定できませんでした。
イントロダクション
ApacheがグローバルなServerNameディレクティブで設定されていない場合、Apache AH00558: サーバーの完全修飾ドメイン名を確実に決定できませんというメッセージが生成されます。このメッセージは主に情報提供のためであり、AH00558エラーによってApacheの正常な動作は妨げられません。
このチュートリアルでは、このシリーズの最初に説明されている方法を使用して、AH00558メッセージを検出する方法を学びます。また、サーバー名指示子を設定してメッセージを解決する方法も学びます。
もしApacheサーバーがAH00558メッセージに影響を受けていることが既に確認できていて、トラブルシューティングの手順をスキップしたい場合は、このチュートリアルの最後にある「Global ServerNameディレクティブの設定」手順に従ってメッセージを解決する方法が説明されています。
systemctl を使用したトラブルシューティング
AH00558: サーバーの完全修飾ドメイン名を信頼性高く判断できませんでしたというメッセージのトラブルシューティングをする場合の最初のステップは、systemctlを使用してApacheの状態を確認することです。systemctlの出力には、多くの場合、このメッセージを解決するために必要な情報が含まれています。
UbuntuやDebianベースのLinuxディストリビューションでApacheのステータスを確認するには、次のコマンドを実行してください。
- sudo systemctl status apache2.service -l –no-pager
Rocky Linux、Fedora、および Red Hat ベースのシステムでは、Apache の状態を調べるためにこのコマンドを使用してください。
- sudo systemctl status httpd.service -l –no-pager
-lフラグは、長い行に対して省略記号(…)を代わりに表示するのではなく、完全な行の内容をsystemctlが出力することを保証します。 –no-pagerフラグは、lessなどのツールを呼び出さずにログ全体を画面に出力します。lessは一度に画面の内容しか表示しません。
以下のような出力を受け取る必要があります:
● 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 Wed 2020-07-29 14:30:03 UTC; 33min ago Process: 34 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 46 (apache2) Tasks: 55 (limit: 2344) CGroup: /system.slice/apache2.service ├─46 /usr/sbin/apache2 -k start ├─47 /usr/sbin/apache2 -k start └─48 /usr/sbin/apache2 -k start Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Starting The Apache HTTP Server… Jul 29 14:30:03 68e2cf19f3f1 apachectl[34]: AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ‘ServerName’ directive globally to suppress this message Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Started The Apache HTTP Server.
ハイライトされたAH00558メッセージを含む行が重要です。基本的に、このメッセージはApacheが設定ファイルで有効なServerName指示を見つけることができなかったため、最初に検出したIPアドレスを使用することを通知しています。この例では、サーバーのパブリックIPアドレスである172.17.02です。AH00558メッセージのトラブルシューティングを行っている場合、検出されるIPアドレスは異なる場合もありますし、人間が読みやすいDNS名である場合もあります。
もしsystemctlの出力に自動検出されたIPアドレスまたはホスト名の値が含まれている場合は、このチュートリアルの最後のセクションである「問題の解決のためのグローバルなServerNameディレクティブの設定」にスキップしてください。そのセクションでは、安全なデフォルトのServerName値を使用してApacheを設定し、ローカルホストのIPアドレスである127.0.0.1を使用します。
もしsystemctlの出力にServerNameディレクティブに使用できる値が示されていない場合は、このチュートリアルの次のセクションで、AH00558メッセージを特定するためにjournalctlを使用してsystemdログを調べる方法について説明します。
Journalctlを使用したトラブルシューティング
「Apacheのsystemdログを調査するには、journalctlコマンドを使用します。journalctlを呼び出す際には、ログエントリの数が多い場合に特定のメッセージを見つけるのに役立つ2つの特定のフラグがあります。」
journalctlコマンドの最初のフラグとして追加するのは、–since todayフラグです。このフラグを使用すると、コマンドの出力が現在の日の00:00:00から始まるログエントリーに制限されます。このオプションを使用することで、エラーチェック時に調べる必要があるログエントリーの量を制限するのに役立ちます。
使用する2つ目のフラグは、systemctlで使用した–no-pagerオプションと同じものであり、画面にログ全体を一度に表示します。
UbuntuやDebian派生のシステムでは、以下のコマンドを実行してください。
- sudo journalctl -u apache2.service –since today –no-pager
以下のコマンドを使用して、Rocky Linux、Fedora、およびRed Hatベースのシステムのログを確認します。
- sudo journalctl -u httpd.service –since today –no-pager
もし、あなたのApacheサーバーがAH00558メッセージを生成している場合は、journalctlコマンドの出力の中から以下のような行を探してください。
— Logs begin at Wed 2020-07-29 14:30:02 UTC, end at Wed 2020-07-29 14:45:03 UTC. — . . . Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Starting The Apache HTTP Server… Jul 29 14:30:03 68e2cf19f3f1 apachectl[34]: AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ‘ServerName’ directive globally to suppress this message Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Started The Apache HTTP Server.
出力の2行目は、「AH00558」メッセージです。この行には、サーバーのパブリックIPアドレスが含まれており、Apacheが実行時に自動的に検出してデフォルトとして設定します。AH00558エラーの確認メッセージとして、グローバルServerNameディレクティブの設定に進んで問題を解決することができます。
それ以外の場合、次のセクションではapachectlコマンドを使用してAH00558エラーメッセージの診断方法について説明します。
apachectlを使用したトラブルシューティング
AH00558: サーバーの完全修飾ドメイン名を確実に特定できませんでしたというエラーは、Apacheのapachectlユーティリティを使用して検出することができます。apachectlを使用すると、Apacheを再読み込みまたは再起動する前に、このようなメッセージをキャッチすることができます。そして、systemctlやjournalctlのログを検索してエラーを特定する手間を省くことができます。
AH00558メッセージのために、Apacheの設定を確認するには、以下のコマンドを実行します。
- sudo apachectl configtest
もしサーバーがAH00558エラーメッセージの影響を受けている場合、以下のような出力が表示されるはずです。
AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.17.0.2. Set the ‘ServerName’ directive globally to suppress this message Syntax OK
以前のセクションでsystemctlとjournalctlを使用してAH00558メッセージを特定したように、前の例でハイライトされたAH00558メッセージの行が重要です。また、この例におけるIPアドレス172.17.0.2は、お使いのサーバーによって異なる場合がありますので、ご注意ください。
このチュートリアルの次のセクションでは、AH00558エラーメッセージを解決するためにServerNameディレクティブを設定する方法について説明します。
グローバルなServerNameディレクティブの設定
AH00558という「サーバの完全修飾ドメイン名を信頼できませんでした」というエラーメッセージを解決するには、Apacheの設定にServerNameディレクティブを追加する必要があります。Apacheは、VirtualHostディレクティブを使用して、1つのサーバを使用して複数のサイトのリクエストを処理するために、受信したHTTPリクエストをIPアドレスまたはDNSホスト名にマップするためにServerNameディレクティブを使用します。
エラーメッセージには、グローバルなServerNameディレクティブも設定する必要があると記載されています。これを行うことで、ApacheはVirtualHostにマッピングされていない着信リクエストを追加のエラーを生成せずにスムーズに処理することができます。
さまざまなApacheの設定との互換性を最大限にするために、グローバルServerNameディレクティブの値として127.0.0.1を使用してください。必要に応じて、サーバーの設定に対応する別のIPアドレスまたはDNS名を使用することもできますが、最も安全なのは127.0.0.1を使用することです。
UbuntuやDebian派生のシステムでは、nanoやお好みのテキストエディタを使用してルート権限で/etc/apache2/apache2.confファイルを開きます。
- sudo nano /etc/apache2/apache2.conf
ファイルの最後に、ServerName 127.0.0.1を含む行を追加してください。
. . .
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
ServerName 127.0.0.1
Rocky LinuxやFedora、およびRed Hat派生システムでは、root権限を持つユーザーでnanoまたはお好みのテキストエディタを使用して、/etc/httpd/conf/httpd.confファイルを開きます。
- sudo nano /etc/httpd/conf/httpd.conf
ファイルの最後にServerName 127.0.0.1という行を追加してください。
/etc/httpd/conf/httpd.confを日本語で自然な言い方に言い換えてください。一つのオプションで結構です。
/etc/httpd/conf/httpd.conf -> 「エチセツ/httpd/conf/httpd.conf」
. . .
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
ServerName 127.0.0.1
終わったら、ファイルを保存して閉じてください。もしナノを使用した場合は、CTRL + X、Y、ENTERを押して保存してください。
設定にServerNameディレクティブを追加したら、apachectlコマンドを実行して、設定が有効かどうかをテストしてください。
- sudo apachectl configtest
apachectl configtestの正常な呼び出しは、以下のような出力を生成するはずです。
Syntax OK
あなたのLinuxディストリビューションに適したsystemctl reloadコマンドを使用して、現在Apacheの設定を再読み込みすることができます。
「UbuntuやDebian派生のシステムでは、以下を実行してください。」
- sudo systemctl reload apache2.service
Rocky Linux、Fedora、およびRed Hat派生システムでは、Apacheの設定を再読み込みするためにこのコマンドを使用してください。
- sudo systemctl reload httpd.service
Apacheをリロードすると、ログにAH00558エラーメッセージが表示されなくなります。このチュートリアルで示されているsystemctl、journalctl、apachectlのいずれかのコマンドを実行して、メッセージが無音化されていることを確認できます。
結論
このチュートリアルでは、AH00558: サーバーの完全なドメイン名を確実に特定できませんでしたというエラーメッセージについて学びました。これらのメッセージはApacheの実行を阻害しないが、グローバルなServerName指示を設定することで解決できます。
あなたはsystemctl、journalctl、そしてapachectlコマンドを使用してAH00558エラーメッセージを検索する方法を学びました。最後に、さまざまなLinux配布でApacheの設定を編集してメッセージを抑制する方法も学びました。
もしApacheがどのようにServerNameディレクティブを使用しているかについて詳しく知りたい場合は、名前ベースの仮想ホストに関するApacheのドキュメンテーションでディレクティブの詳細が説明されています。