该系列的一部分:
常见的 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.confSSLCertificateFile
systemctl此示例中的输出还包括systemd日志中的一些行。如果您的输出显示在您的配置文件中的特定行生成语法错误,你可以跳过journalctl和apachectl configtest故障排除步骤。相反,您可以直接转到文件以检查和编辑错误行以解决错误。
如果您的输出未提供有关 Apache 配置文件中错误位置的具体信息,您将需要检查日志的journalctl输出systemd。以下部分说明如何使用journalctlAH00526 错误进行故障排除。
使用journalctl日志进行故障排除
如果您的systemctl输出不包含有关 AH00526 语法错误的详细信息,您可以继续使用该journalctl命令检查systemdApache 的日志。
在 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命令检查配置文件是否有错误。