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


该系列的一部分:
常见的 Apache 错误

本教程系列介绍了如何对使用Apache Web 服务器时可能遇到的一些最常见错误进行故障排除和修复

本系列中的每个教程都包含对常见 Apache 配置、网络、文件系统或权限错误的描述。本系列首先概述了可用于对 Apache 进行故障排除的命令和日志文件。后续教程详细检查特定错误。

介绍

AH00558: Could not reliably determine the server's fully qualified domain name当 Apache 未配置全局ServerName指令时,会生成一条 Apache消息该消息主要用于提供信息,AH00558 错误不会阻止 Apache 正常运行。

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

如果您已经确定您的 Apache 服务器受到 AH00558 消息的影响,并且您想跳过故障排除步骤,本教程末尾设置全局ServerName指令步骤说明了如何解决该消息。

故障排除 使用 systemctl

AH00558: Could not reliably determine the server's fully qualified domain name消息进行故障排除时的第一步是使用systemctl. systemctl在许多情况下,输出将包含解析消息所需的所有信息。

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

Ubuntu 和 Debian 系统
  • sudo systemctl status apache2.service -l --no-pager

在 CentOS Fedora 和 RedHat 派生系统上,使用此命令检查 Apache 的状态:

CentOS 和 Fedora 系统
  • sudo systemctl status httpd.service -l --no-pager

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

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

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 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 消息的突出显示行是重要的一行。本质上,它会通知您 ApacheServerName在其配置文件中找不到有效的指令,因此它将使用它检测到的第一个 IP 地址。在本例中,它是服务器的公共 IP 地址:172.17.02如果您正在对 AH00558 消息进行故障排除,则检测到的 IP 地址可能不同,或者它可能是人类可读的 DNS 名称。

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

如果您的systemctl输出未指示可用于ServerName指令的值,本教程的下一部分将说明如何检查systemd日志journalctl以定位 AH00558 消息。

故障排除 使用 journalctl

要检查systemdApache日志,您将使用该journalctl命令。调用 时journalctl,如果有大量日志条目,有两个特定标志可帮助您定位特定消息。

您将添加到journalctl调用的第一个标志--since today标志。它会将命令的输出限制为仅从当天的 00:00:00 开始记录条目。使用此选项将有助于限制检查错误时需要检查的日志条目的数量。

您将使用的第二个标志与您使用的--no-pager选项相同systemctl,它将立即将整个日志输出到您的屏幕。

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

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

在 CentOS、Fedora 和 RedHat 派生系统上,使用此命令检查日志:

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

如果您的 Apache 服务器正在生成 AH00558 消息,请查看journalctl命令输出中的以下行:

Output
-- 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

一个AH00558: Could not reliably determine the server's fully qualified domain name可以使用Apache的被检测到的错误apachectl效用。有了apachectl你可以重装或重新启动Apache之前赶上这样的消息,也可不必通过搜索systemctljournalctl日志,查找错误。

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

  • sudo apachectl configtest

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

Output
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

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

本教程的下一部分说明如何设置ServerName指令以解决 AH00558 错误消息。

制定全球ServerName指令

要解决AH00558: Could not reliably determine the server's fully qualified domain name错误消息,您需要向ServerNameApache 配置添加指令。Apache 使用该ServerName指令将传入的 HTTP 请求映射到使用VirtualHost指令的 IP 地址或 DNS 主机名,以便使用单个服务器处理对多个站点的请求。

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

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

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

  • 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

在 CentOS、Fedora 和 RedHat 派生系统上,/etc/httpd/conf/httpd.conf使用 root 权限nano或您喜欢的文本编辑器打开文件

  • 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 + XY、 然后ENTER

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

  • sudo apachectl configtest

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

Output
Syntax OK

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

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

  • sudo systemctl reload apache2.service

在 CentOS、Fedora 和 RedHat 派生系统上,使用此命令重新加载 Apache 的配置:

  • sudo systemctl reload httpd.service

重新加载 Apache 后,AH00558 错误消息将不再出现在您的日志中。可以确认的消息是由运行任何三个沉默systemctljournalctlapachectl命令将在本教程中演示。

结论

在本教程中,您了解了AH00558: Could not reliably determine the server's fully qualified domain name错误消息。虽然这些消息不会阻止 Apache 运行,但可以通过设置全局ServerName指令来解决它们

你学会了如何搜索使用AH00558错误消息systemctljournalctlapachectl命令。最后,您学习了如何在各种 Linux 发行版上编辑 Apache 配置以消除消息。

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁