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

引言

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

在本教程中,你将学习如何使用《如何解决常见Apache错误教程》开头描述的方法来检测AH00558信息。你还将学习如何设置一个ServerName指令来解决该信息。

如果您已经确定您的Apache服务器受到AH00558消息的影响,并且希望跳过故障排除步骤,本教程最后的设置全局ServerName指令步骤将解决该消息的问题。

使用systemctl进行故障排除

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

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

乌班图和德比安系统
  1. sudo systemctl status apache2.service -l –no-pager

 

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

洛基和红帽系统
  1. 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消息的突出显示行。基本上,它告诉您Apache在配置文件中找不到有效的ServerName指令,因此将使用它检测到的第一个IP地址。在这个例子中,它是服务器的公共IP地址:172.17.02。如果您正在解决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中使用的那样,它会将整个日志一次性输出到你的屏幕上。

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

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

 

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

  1. 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进行故障排除

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

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

  1. 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

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

本教程的下一部分将解释如何设置ServerName指令来解决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 可以被简化为 `/apache2/apache2.cfg`
. . .
# 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 翻译为中文为:/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应该产生下面这样的输出:

Output

Syntax OK

现在,您可以使用适用于您的 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错误消息。您可以通过运行本教程中演示的systemctl、journalctl或apachectl命令中的任一个来确认这些消息被静音了。

结论

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

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

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

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds