Apache配置错误AH00526:语法错误
介绍
Apache AH00526: Syntax error
消息在您的 Apache 配置文件中某处存在拼写错误或配置错误时出现。 这是一个通用错误,可以指示许多潜在问题。
在加载无效配置之前,可以使用 apachectl configtest
检测错误。 也可以使用 systemctl
和 journalctl
命令找到它。 在后两种情况下,Apache 会因为错误而无法运行。
如果您使用 apachectl
检测到错误,请跳到本教程的 使用内置 apachectl 命令 进行故障排除部分。 否则,下一节将介绍如何使用 systemctl
来排除错误。
systemctl
故障排除
按照本系列开头的 如何排除常见 Apache 错误 教程中的故障排除步骤,排除 AH00526 错误的第一步是使用 systemctl
检查 Apache 的状态。 重要的是要了解错误是否影响正在运行的进程,或者它是否会阻止 Apache 启动。
在 Ubuntu 和 Debian 派生的 Linux 发行版上,运行以下命令来检查 Apache 的状态:
Ubuntu 和 Debian 系统
sudo systemctl status apache2.service -l --no-pager
在 CentOS 和 Fedora 系统上,使用以下命令检查 Apache 的状态:
CentOS 和 Fedora 系统
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 没有运行。 该错误是由 /etc/apache2/sites-enabled/000-default.conf
文件中 SSSLCertificateFile
行开头的额外 S 字符引起的。 正确的指令应该是 SSLCertificateFile
,因此在此示例中编辑文件以修复指令名称将解决错误并允许 Apache 启动。
此示例中的 systemctl
输出还包括来自 systemd
日志的一些行。 如果您的输出表明配置文件中的特定行正在生成语法错误,您可以跳过 journalctl
和 apachectl configtest
故障排除步骤。 相反,您可以直接转到该文件以检查和编辑错误行以解决错误。
如果您的输出未提供有关 Apache 配置文件中错误位置的具体信息,您将需要检查 systemd
日志中的 journalctl
输出。 以下部分说明如何使用 journalctl
排除 AH00526 错误。
使用 journalctl
日志进行故障排除
如果您的 systemctl
输出不包含有关 AH00526 语法错误的详细信息,您可以继续使用 journalctl
命令检查 Apache 的 systemd
日志。
在 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 发行版的命令重新启动它,如果配置中没有更多错误,服务器将启动。
但是,如果出现更多错误,Apache 和 systemctl status
将继续报告错误并尝试解释服务器无法启动的原因。 systemctl
在 Ubuntu 和 Debian 系统上会输出类似这样的失败信息:
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 派生系统上,启动失败消息将类似于以下内容:
CentOS 和 Fedora 输出
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
命令直接检查配置文件是否有错误。