Apache 配置错误 AH00558:无法可靠地确定服务器的完全合格域名

简介

当Apache未配置全局ServerName指令时,会生成ApacheAH00558:无法可靠地确定服务器的完全限定域名消息。该消息主要用于提供信息,AH00558错误不会阻止Apache正确运行。

在本教程中,您将学习如何使用本系列开头的如何排除常见APACHE Errors故障]教程中描述的方法来检测AH00558消息。您还将学习如何设置ServerName指令来解析消息。

如果您已经确定您的apache服务器受到AH00558消息的影响,并且您想跳过故障排除步骤,本教程末尾的[设置全局ServerNameDirective](# setting-a-global-servername-directive)步骤]解释了如何解析该消息。

使用systemctl排查故障

在排除AH00558:无法可靠确定服务器的完全限定域名消息时,第一步是使用systemctl检查APACHE的状态。在许多情况下,systemctl的输出将包含解析消息所需的所有信息。

在Ubuntu和Debian派生的Linux发行版上,运行以下命令以检查Apache的状态:

1[label Ubuntu and Debian Systems]
2sudo systemctl status apache2.service -l --no-pager

在Rocky Linux、Fedora和Red Hat派生系统上,使用以下命令检查Apache的状态:

1[label Rocky and Red Hat Systems]
2sudo systemctl status httpd.service -l --no-pager

-l标志将确保systemctl输出一行的全部内容,而不是用省略号(...)替换长行。--no-pager标志将整个日志输出到您的屏幕上,而无需调用less之类的工具,该工具每次只显示一个屏幕的内容。

您应该会收到类似以下内容的输出:

 1[secondary_label Output]
 2 apache2.service - The Apache HTTP Server
 3   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
 4  Drop-In: /lib/systemd/system/apache2.service.d
 5           └─apache2-systemd.conf
 6   Active: active (running) since Wed 2020-07-29 14:30:03 UTC; 33min ago
 7  Process: 34 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 8 Main PID: 46 (apache2)
 9    Tasks: 55 (limit: 2344)
10   CGroup: /system.slice/apache2.service
11           ├─46 /usr/sbin/apache2 -k start
12           ├─47 /usr/sbin/apache2 -k start
13           └─48 /usr/sbin/apache2 -k start
14
15Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Starting The Apache HTTP Server...
16Jul 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
17Jul 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地址或主机名的值,请跳到本教程的最后一节[设置全局ServerNameDirective](# setting-a-global-servername-directive)来解决该问题。在该部分中,您将使用localhost的IP地址127.0.0.1使用安全的默认ServerName值来配置Apache。

如果您的systemctl输出没有指示可用于ServerName指令的值,本教程的下一节将解释如何使用Journal alctl检查systemd日志以定位AH00558消息。

使用Jouralctl排查

要检查APACHE的systemd日志,您将使用Journal alctl命令。在调用Journal alctl时,如果有大量的日志条目,有两个特定的标志可以帮助您定位特定的消息。

您要添加到Journal alctl调用的第一个标志是--自今天起标志。它将命令的输出限制为仅从当天00:00:00开始的日志条目。使用此选项将有助于限制在检查错误时需要检查的日志条目的数量。

您将使用的第二个标志与您在systemctl中使用的--no-pager选项相同,它会将整个日志一次输出到您的屏幕上。

在Ubuntu和Debian派生的系统上,运行以下命令:

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

在Rocky Linux、Fedora和Red Hat衍生系统上,使用此命令检查日志:

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

如果您的Apache服务器正在生成一条AH00558消息,请查看Journal alctl命令输出中类似以下内容的行:

1[secondary_label Output]
2-- Logs begin at Wed 2020-07-29 14:30:02 UTC, end at Wed 2020-07-29 14:45:03 UTC. --
3. . .
4Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Starting The Apache HTTP Server...
5Jul 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
6Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Started The Apache HTTP Server.

输出的第二行是AH00558消息。该行包含服务器的公共IP地址,这是在运行时被Apache自动检测并设置为默认地址的地址。有了这条消息作为AH00558错误的确认,您可以进入[设置全局ServerNameDirective](# setting-a-global-servername-directive)来解决问题。

否则,下一节将介绍如何使用apachectl命令诊断AH00558错误消息。

使用apachectl排查故障

可以使用Apache的apachectl实用程序检测到AH00558:无法可靠地确定服务器的完全限定域名错误。有了apachectl,您就可以在重载或重启apache之前捕获到这样的消息,并且您可以避免搜索systemctlJouralctl日志来定位错误。

要检查您的APACHE配置中的AH00558消息,请运行以下命令:

1sudo apachectl configtest

如果您的服务器受到AH00558错误消息的影响,您应该会收到如下输出:

1[secondary_label Output]
2AH00558: 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
3Syntax OK

与本教程中使用systemctljournalctl定位AH00558消息的前几节一样,包含AH00558消息的行(在上一个示例中突出显示)是重要的一行。再次注意,本例中的IP地址172.17.0.2在您的服务器上可能不同。

本教程的下一节介绍如何设置ServerName指令来解析AH00558错误消息。

设置全局ServerName指令

若要解决)错误消息,您需要向Apache配置中添加)指令。Apache使用ServerName指令将传入的HTTP请求映射到使用VirtualHost指令的IP地址或DNS主机名,以便使用单个服务器处理多个站点的请求。

错误消息指出,还应设置全局ServerName指令。这样做将确保Apache可以优雅地处理未映射到VirtualHost的传入请求,而不会产生额外的错误。

为了最大限度地兼容各种Apache配置,请将值127.0.0.1用于全局ServerName指令。如果需要,您可以使用与服务器配置相对应的不同IP地址或DNS名称,但使用127.0.0.1是最安全的。

在Ubuntu和Debian派生系统上,使用nan或您首选的文本编辑器,以超级用户权限打开/etc/apache2/apache2.conf文件:

1sudo nano /etc/apache2/apache2.conf

在文件末尾添加一行servername 127.0.0.1

1[label /etc/apache2/apache2.conf]
2. . .
3# Include the virtual host configurations:
4IncludeOptional sites-enabled/*.conf
5
6# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
7ServerName 127.0.0.1

在Rocky Linux、Fedora和Red Hat派生系统上,使用nan或您首选的文本编辑器,以超级用户权限打开/etc/httpd/conf/httpd.conf文件:

1sudo nano /etc/httpd/conf/httpd.conf

在文件末尾添加servername 127.0.0.1行:

1[label /etc/httpd/conf/httpd.conf]
2. . .
3# Supplemental configuration
4#
5# Load config files in the "/etc/httpd/conf.d" directory, if any.
6IncludeOptional conf.d/*.conf
7ServerName 127.0.0.1

完成后保存并关闭该文件。如果您使用的是nan,请按CTRL+XY,然后按Enter

在配置中添加ServerName指令后,运行apachectl测试配置是否有效。

1sudo apachectl configtest

成功的apachectl figest调用应该会产生如下输出:

1[secondary_label Output]
2Syntax OK

现在,您可以使用适用于您的Linux发行版的systemctl reload命令重新加载Apache的配置。

在Ubuntu和Debian派生的系统上,运行以下命令:

1sudo systemctl reload apache2.service

在Rocky Linux、Fedora和Red Hat衍生系统上,使用此命令重新加载Apache的配置:

1sudo systemctl reload httpd.service

重新加载Apache后,AH00558错误消息将不再出现在您的日志中。您可以通过运行本教程中演示的三个systemctlJournal alctlapachectl命令中的任何一个来确认消息已静默。

结论

在本教程中,您了解了AH00558:无法可靠地确定服务器的完全限定域名错误消息。虽然这些消息不会阻止Apache运行,但可以通过设置全局ServerName指令来解决。

您学习了如何使用systemctlJournal alctlapachectl命令搜索AH00558错误消息。最后,您了解了如何在各种Linux发行版上编辑您的Apache配置以使消息静默。

如果您想了解更多有关apache如何使用ServerName指令的信息,请参阅关于基于名称的虚拟Hosts]的apache文档,更详细地解释该指令。

Published At
Categories with 技术
Tagged with
comments powered by Disqus