该系列的一部分:
常见的 Apache 错误
本教程系列介绍了如何对使用Apache Web 服务器时可能遇到的一些最常见错误进行故障排除和修复。
本系列中的每个教程都包含对常见 Apache 配置、网络、文件系统或权限错误的描述。本系列首先概述了可用于对 Apache 进行故障排除的命令和日志文件。后续教程详细检查特定错误。
介绍
AH00526: Syntax error
当您的 Apache 配置文件中的某处存在拼写错误或配置错误的设置时,会出现一条 Apache消息。这是一个通用错误,可以指示许多潜在问题。
可以在apachectl configtest
加载无效配置之前使用该错误进行检测。也可以使用systemctl
和journalctl
命令找到它。在后两种情况下,Apache会因为错误而无法运行。
如果您已检测到错误,请apachectl
跳至本教程的使用内置apachectl
命令进行故障排除部分。否则,下一节将解释如何使用systemctl
来排除错误。
故障排除 systemctl
按照本系列开头的如何对常见 Apache 错误进行故障排除教程中的故障排除步骤进行操作,对AH00526 错误进行故障排除的第一步是使用systemctl
. 了解错误是否会影响正在运行的进程,或者是否会阻止 Apache 启动,这一点很重要。
在 Ubuntu 和 Debian 派生的 Linux 发行版上,运行以下命令来检查 Apache 的状态:
- sudo systemctl status apache2.service -l --no-pager
在 CentOS 和 Fedora 系统上,使用此命令检查 Apache 的状态:
- sudo systemctl status httpd.service -l --no-pager
该-l
标志将确保systemctl
输出一行的全部内容,而不是用省略号 ( …
)替换长行。该--no-pager
标志会将整个日志输出到您的屏幕,而无需调用这样的工具less
,一次只显示一个内容屏幕。
由于您正在对AH00526: Syntax error
消息进行故障排除,您应该会收到类似于以下内容的输出:
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: failed (Result: exit-code) since Wed 2020-07-15 13:45:49 UTC; 1min 37s ago
. . .
Jul 15 13:45:49 f17f01056c5b systemd[1]: Starting The Apache HTTP Server...
Jul 15 13:45:49 f17f01056c5b apachectl[15860]: AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/000-default.conf:
Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Invalid command 'SSSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration
Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Action 'start' failed.
Jul 15 13:45:49 f17f01056c5b apachectl[15860]: The Apache error log may have more information.
Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Control process exited, code=exited status=1
Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Failed with result 'exit-code'.
Jul 15 13:45:49 f17f01056c5b systemd[1]: Failed to start The Apache HTTP Server.
在这种情况下,Apache 没有运行,因为语法错误。该错误是由文件中行首 的额外S字符引起的。正确的指令应该是,因此在此示例中编辑文件以修复指令名称将解决错误并允许 Apache 启动。SSSLCertificateFile
/etc/apache2/sites-enabled/000-default.conf
SSLCertificateFile
systemctl
此示例中的输出还包括systemd
日志中的一些行。如果您的输出显示在您的配置文件中的特定行生成语法错误,你可以跳过journalctl
和apachectl configtest
故障排除步骤。相反,您可以直接转到文件以检查和编辑错误行以解决错误。
如果您的输出未提供有关 Apache 配置文件中错误位置的具体信息,您将需要检查日志的journalctl
输出systemd
。以下部分说明如何使用journalctl
AH00526 错误进行故障排除。
使用journalctl
日志进行故障排除
如果您的systemctl
输出不包含有关 AH00526 语法错误的详细信息,您可以继续使用该journalctl
命令检查systemd
Apache 的日志。
在 Ubuntu 和 Debian 派生系统上,运行以下命令:
- sudo journalctl -u apache2.service --since today --no-pager
在 CentOS、Fedora 和 RedHat 派生系统上,使用此命令检查日志:
- sudo journalctl -u httpd.service --since today --no-pager
该--since today
标志将命令的输出限制为仅从当天的 00:00:00 开始记录条目。使用此选项将有助于限制检查错误时需要检查的日志条目的数量。
如果您的 Apache 配置中有 AH00526 错误,请查看journalctl
命令输出中的以下行:
Output-- Logs begin at Tue 2019-11-05 21:26:44 UTC, end at Tue 2020-06-09 15:13:01 UTC. --
. . .
Jun 09 15:12:28 f17f01056c5b apachectl[3157]: AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf:
Jun 09 15:12:28 f17f01056c5b apachectl[3157]: Invalid command 'SSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration
. . .
输出的第一行是AH00526错误。由于此错误是与无效设置或配置文件中的错字相关的一般错误,因此下一行说明导致错误的原因。在这种情况下,它是一个名为 的指令SSLCertificateFile
,只有在ssl
启用模块时才有效。
如果您遇到与无效SSLCertificateFile
指令相关的 AH00526 错误,您可以通过启用ssl
模块然后重新启动 Apache 使错误消失来解决它。
对于 Ubuntu 和 Debian 系统,运行以下命令以启用该模块:
- sudo a2enmod ssl
- sudo systemctl restart apache2.service
在 CentOS 和 Fedora 系统上,确保mod_ssl
安装了该软件包,然后通过将其添加到 Apache/etc/httpd/conf.modules.d
目录中的文件来加载模块,如下所示:
- sudo yum install mod_ssl
- echo "LoadModule ssl_module modules/mod_ssl.so" | sudo tee > /etc/httpd/conf.modules.d/00-ssl.conf
- sudo systemctl restart httpd.service
一旦模块被 Apache 引用并且您使用适合您的 Linux 发行版的命令重新启动它,如果配置中没有更多错误,服务器将启动。
但是,如果出现更多错误,Apachesystemctl status
将继续报告它们并尝试解释服务器无法启动的原因。systemctl
将在 Ubuntu 和 Debian 系统上输出这样的失败消息:
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details
而在 CentOS、Fedora 和 RedHat 派生系统上,失败的启动信息将类似于以下内容:
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.
当 Apache 仍因错误而无法启动时,使用该apachectl configtest
命令可能是诊断问题的最有效的方法。下一节将解释如何使用该实用程序来解决再次与无效SSLCertificateFile
指令相关的 AH00526 错误。
故障排除 apachectl
要使用 Apache 的apachectl
实用程序对 AH00526 错误进行故障排除,您可以使用configtest
子命令测试您的 Apache 配置。此工具将解析您的 Apache 文件以确定它是否有效,如果无效,则会在 Apache 配置中找到不正确的设置。
该apachectl configtest
命令对于在使用新配置重新加载 apache 之前捕获语法错误很有用。如果 Apache 文件中的设置配置错误,此测试可以帮助您避免服务中断。
以下示例配置测试命令将返回一条AH00526 Syntax error
消息,并说明可能的问题是 Apache 正在引用一个空的SSLCertificateFile
:
- sudo apachectl configtest
OutputAH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf:
SSLCertificateFile: file '/etc/ssl/certs/example.com.pem' does not exist or is empty
在此示例输出中,该/etc/ssl/certs/example.com.pem
文件不存在,如错误消息所述。向文件添加 SSL/TLS 证书或删除指令将解决该问题。
成功的apachectl configtest
调用应该会产生如下输出:
OutputSyntax OK
结论
在本教程中,您学习了如何对 Apache AH00526 语法错误进行故障排除。调查任何 Apache 错误时的第一步是使用systemctl status apache2
或systemctl status httpd
取决于您的 Linux 发行版检查服务器的状态。从那里,您可以确定 Apache 是否正常运行,或者是否由于错误而无法启动。
确定 Apache 的状态后,您可以使用journalctl
检查systemd
进程的日志进一步诊断它。您也可以直接使用该apachectl configtest
命令检查配置文件是否有错误。