解决Apache错误AH00558:服务器FQDN无法确定问题

引言

当Apache服务器未配置全局ServerName指令时,通常会生成一条信息提示:“Apache AH00558: 无法可靠确定服务器的完全限定域名”。这条信息主要用于提供提示,AH00558错误本身并不会阻止Apache正常运行。

本教程将指导您如何检测AH00558信息,并学习如何设置ServerName指令以解决此问题。如果您已经确认Apache服务器受到AH00558消息的影响,并希望跳过故障排除步骤,可以直接跳转到本教程末尾的“设置全局ServerName指令”部分,该步骤将直接解决此问题。

使用systemctl进行故障排除

在处理“AH00558: 无法可靠地确定服务器的完全限定域名”错误消息时,第一步是使用systemctl检查Apache的状态。systemctl的输出通常包含解决此消息所需的所有信息。

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

Ubuntu和Debian系统

sudo systemctl status apache2.service -l --no-pager

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

Rocky Linux和Red Hat系统

sudo systemctl status httpd.service -l --no-pager

使用-l标志将确保systemctl输出完整行内容,而不是用省略号(…)替换长行。--no-pager标志将在不调用类似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.0.2。如果您正在解决AH00558消息,检测到的IP地址可能会不同,或者可能是可读的DNS名称。

如果您的systemctl输出包含任何IP地址或主机名的自动检测值,请跳转到本教程的最后一部分“设置全局ServerName指令”以解决此问题。在该部分,您将使用本地主机IP地址127.0.0.1为Apache配置一个安全的默认ServerName值。

如果您的systemctl输出没有指示服务器名称指令可用的值,本教程的下一部分将解释如何使用journalctl检查systemd日志以查找AH00558消息。

使用journalctl进行故障排除

要检查Apache的systemd日志,您将使用journalctl命令。在调用journalctl时,有两个特定的标志可以帮助您在日志条目很多的情况下定位特定的消息。

您将在journalctl调用中添加的第一个标志是--since today标志。它将限制命令的输出只显示从当前日期的00:00:00开始的日志条目。使用此选项可以帮助限制需要检查错误时需要审查的日志条目量。

您将使用的第二个标志是与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.

输出的第二行是AH00558消息。该行包含了服务器的公共IP地址,这是Apache在运行时自动检测和设置的默认地址。通过这个消息确认AH00558错误,您可以继续进行设置全局ServerName指令来解决问题。

另外,下一部分将介绍如何使用apachectl命令来诊断AH00558错误消息。

使用apachectl进行故障排除

这是文章《Apache配置错误AH00558: 无法可靠地确定服务器的完全限定域名》的第2部分(共2部分)。

使用Apache的apachectl工具可以检测到AH00558错误,该错误是由于无法可靠地确定服务器的完全限定域名所致。通过使用apachectl,您可以在重新加载或重启Apache之前捕获到这类消息,并避免在systemctljournalctl日志中搜索以查找错误。

要检查Apache配置以查看AH00558消息,请运行以下命令:

  1. sudo apachectl configtest

 

如果您的服务器受到AH00558错误信息的影响,您应该收到类似下面的输出。

输出

AH00558: apache2: 无法可靠地确定服务器的完全限定域名,正在使用 172.17.0.2。请全局设置 ‘ServerName’ 指令以抑制此消息 语法正常

与本教程中使用systemctljournalctl定位AH00558消息的前几部分类似,包含AH00558消息的行,在上个示例中被标记为重要。请注意,在这个示例中的IP地址172.17.0.2在您的服务器上可能会有所不同。

本教程的下一部分将解释如何设置ServerName指令来解决AH00558错误消息。

设置全局服务器名称指令以解决AH00558错误消息

为了解决AH00558错误消息:“无法可靠地确定服务器的完全限定域名”,您需要在Apache配置中添加一个ServerName指令。Apache使用ServerName指令通过在VirtualHost指令中将传入的HTTP请求映射到一个IP地址或DNS主机名来处理对多个站点使用单个服务器的请求。

错误消息指出,还应设置全局ServerName指令。这样做将确保Apache优雅地处理那些没有映射到虚拟主机的传入请求,而不会生成额外的错误。

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

在Ubuntu和Debian衍生系统上,使用nano或您喜欢的文本编辑器以root权限打开/etc/apache2/apache2.conf文件。

  1. sudo nano /etc/apache2/apache2.conf

 

在文件末尾添加一行,内容为ServerName 127.0.0.1

/etc/apache2/apache2.conf

. . .
# 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衍生系统上,使用nano或您喜欢的文本编辑器以root权限打开/etc/httpd/conf/httpd.conf文件。

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

 

ServerName 127.0.0.1行添加到文件末尾。

/etc/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

当你完成后保存并关闭文件。如果使用nano,可以通过按下CTRL + X,然后按Y,最后按ENTER来实现。

一旦你在配置文件中添加了ServerName指令,运行apachectl来测试配置是否有效。

  1. sudo apachectl configtest

 

成功调用apachectl configtest应该产生下面这样的输出:

输出

语法正常

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

在Ubuntu和基于Debian的系统上运行以下命令:

  1. sudo systemctl reload apache2.service

 

在Rocky Linux、Fedora和基于Red Hat的系统中,使用这个命令重新加载Apache的配置。

  1. sudo systemctl reload httpd.service

 

在重新加载Apache之后,您的日志中将不再出现AH00558错误消息。您可以通过运行本教程中演示的systemctljournalctlapachectl命令中的任一个来确认这些消息被静音了。

结论

在本教程中,你了解了AH00558错误信息:“无法可靠地确定服务器的完全限定域名”。尽管这些信息不会阻止Apache运行,但可以通过设置全局ServerName指令来解决这个问题。

你学会了如何使用systemctljournalctlapachectl命令搜索AH00558错误信息。最后,你还学会了如何在不同的Linux发行版中编辑Apache配置以消除这些消息。

如果您想了解更多有关Apache如何使用ServerName指令的内容,Apache关于基于名称的虚拟主机的文档会更详细地解释该指令。

bannerAds