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 命令直接检查配置文件是否有错误。