Apache配置错误AH00526:语法错误

来自菜鸟教程
跳转至:导航、​搜索

介绍

Apache AH00526: Syntax error 消息在您的 Apache 配置文件中某处存在拼写错误或配置错误时出现。 这是一个通用错误,可以指示许多潜在问题。

在加载无效配置之前,可以使用 apachectl configtest 检测错误。 也可以使用 systemctljournalctl 命令找到它。 在后两种情况下,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 日志的一些行。 如果您的输出表明配置文件中的特定行正在生成语法错误,您可以跳过 journalctlapachectl 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 apache2systemctl status httpd 检查服务器的状态,具体取决于您的 Linux 发行版。 从那里,您可以确定 Apache 是否正确运行,或者它是否由于错误而无法启动。

确定 Apache 的状态后,您可以使用 journalctl 进一步诊断它,以检查进程的 systemd 日志。 您也可以使用 apachectl configtest 命令直接检查配置文件是否有错误。