Apache 配置错误 AH00526:语法错误

简介

当您的Apache配置文件中的某个位置存在输入错误或配置错误的设置时,会出现一条ApacheAH00526:语法错误消息。这是一个一般性错误,可能表明存在许多潜在问题。

在加载无效配置之前,可以使用apachectl figest检测到错误。也可以使用systemctlJournal alctl命令找到它。在后两种情况下,由于该错误,阿帕奇将无法运行。

如果您使用apachectl检测到错误,请跳至本教程的[使用内置apachectlCommand](# troubleshooting-using-the-built-in-apachectl-command)进行故障排除]部分。否则,下一节将介绍如何使用systemctl排除错误。

systemctl故障排除

按照本系列开头的如何排除常见apache Errors故障》教程中的故障排除步骤,对AH00526错误进行故障排除的第一步是使用systemctl检查apache的状态。重要的是要了解错误是否会影响正在运行的进程,或者是否会阻止Apache启动。

在Ubuntu和Debian派生的Linux发行版上,运行以下命令以检查阿帕奇的状态:

1[label Ubuntu and Debian Systems]
2sudo systemctl status apache2.service -l --no-pager

在CentOS和Fedora系统上,使用以下命令检查APACHE的状态:

1[label CentOS and Fedora Systems]
2sudo systemctl status httpd.service -l --no-pager

-l标志将确保systemctl输出一行的全部内容,而不是用省略号()用于排长队。--no-pager标志会将整个日志输出到您的屏幕上,而不会调用像less这样的工具,该工具一次只显示一屏内容。

由于您正在对AH00526:语法错误消息进行故障排除,因此您应该会收到类似以下内容的输出:

 1[secondary_label Output]
 2 apache2.service - The Apache HTTP Server
 3   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
 4  Drop-In: /lib/systemd/system/apache2.service.d
 5           └─apache2-systemd.conf
 6   Active: failed (Result: exit-code) since Wed 2020-07-15 13:45:49 UTC; 1min 37s ago
 7  . . .
 8
 9Jul 15 13:45:49 f17f01056c5b systemd[1]: Starting The Apache HTTP Server...
10Jul 15 13:45:49 f17f01056c5b apachectl[15860]: AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/000-default.conf:
11Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Invalid command 'SSSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration
12Jul 15 13:45:49 f17f01056c5b apachectl[15860]: Action 'start' failed.
13Jul 15 13:45:49 f17f01056c5b apachectl[15860]: The Apache error log may have more information.
14Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Control process exited, code=exited status=1
15Jul 15 13:45:49 f17f01056c5b systemd[1]: apache2.service: Failed with result 'exit-code'.
16Jul 15 13:45:49 f17f01056c5b systemd[1]: Failed to start The Apache HTTP Server.

在这种情况下,由于语法错误,Apache没有运行。该错误是由于/etc/apache2/Sites-Enabled/000-default.conf文件中SSSL认证文件行开头的EXTRA_S_CHARACTER引起的。正确的指令应该是SSLcerficateFile,因此编辑该文件以修复本例中的指令名称将解决错误并允许启动Apache。

本例中的systemctl输出还包括systemd日志中的一些行。如果您的输出指示配置文件中的特定行正在生成语法错误,则可以跳过journalctlapachectl software test故障排除步骤。相反,您可以直接转到文件来检查和编辑错误行以解决错误。

如果您的输出没有在apache的配置文件中提供有关错误位置的具体信息,则需要检查systemd日志中的Journal alctl输出。以下部分介绍如何使用Journal alctl排除AH00526错误。

Journal alctl日志疑难解答

如果您的systemctl输出不包含有关AH00526语法错误的详细信息,则可以继续使用journalctl命令检查Apache的systemd日志。

在Ubuntu和Debian派生的系统上,运行以下命令:

1sudo journalctl -u apache2.service --since today --no-pager

在CentOS、Fedora和RedHat衍生系统上,使用此命令检查日志:

1sudo journalctl -u httpd.service --since today --no-pager

--自今天标志将命令的输出限制为仅从当天00:00:00开始的日志条目。使用此选项将有助于限制在检查错误时需要检查的日志条目的数量。

如果Apache配置中出现AH00526错误,请查看journalctl命令输出中的行,如下所示:

1[secondary_label Output]
2-- Logs begin at Tue 2019-11-05 21:26:44 UTC, end at Tue 2020-06-09 15:13:01 UTC. --
3. . .
4Jun 09 15:12:28 f17f01056c5b apachectl[3157]: AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf:
5Jun 09 15:12:28 f17f01056c5b apachectl[3157]: Invalid command 'SSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration
6. . .

输出的第一行是AH00526错误。由于此错误是与配置文件中的无效设置或打字错误相关的常规错误,因此下一行解释了导致该错误的原因。在本例中,它是一个名为SSLcerficateFile的指令,只有在ssl模块开启时才有效。

如果您遇到与无效的SSLcerficateFile指令相关的AH00526错误,您可以通过启动ssl模块,然后重启APACHE来解决该错误。

对于Ubuntu和Debian系统,运行以下命令以启用该模块:

1sudo a2enmod ssl
2sudo systemctl restart apache2.service

在CentOS和Fedora系统上,请确保安装了mod_ssl包,然后将其添加到apache的/etc/httpd/conf.modes.d目录中,文件如下:

1sudo yum install mod_ssl
2echo "LoadModule ssl_module modules/mod_ssl.so" | sudo tee > /etc/httpd/conf.modules.d/00-ssl.conf
3sudo systemctl restart httpd.service

一旦Apache引用了该模块,并且您使用适用于您的Linux发行版的命令重新启动它,如果配置中没有更多错误,服务器将启动。

但是,如果有更多的错误,apache和systemctl状态会继续上报,并试图解释为什么服务器无法启动。在Ubuntu和Debian系统上,systemctl会输出这样的失败消息:

1[label Ubuntu & Debian Output]
2Job for apache2.service failed because the control process exited with error code.
3See "systemctl status apache2.service" and "journalctl -xe" for details

在CentOS、Fedora和RedHat派生系统上,失败的启动消息如下所示:

1[label CentOS and Fedora Output]
2Job for httpd.service failed because the control process exited with error code.
3See "systemctl status httpd.service" and "journalctl -xe" for details.

当由于错误而仍然无法启动Apache时,使用apachectl配置测试命令可能是诊断问题最高效、最有效的方法。下一节将解释如何使用该实用程序来解决AH00526错误,该错误也与无效的SSLcerficateFile指令相关。

使用apachectl进行故障排除

要使用apache的apachectl实用程序排除AH00526错误,您可以使用figest子命令测试您的apache配置。该工具将解析您的Apache文件以确定其是否有效,如果不是,则在Apache配置中找到不正确的设置。

在使用新的配置重新加载apache之前,apachectl figest命令对于捕获语法错误非常有用。此测试可以帮助您避免在Apache文件中配置错误的情况下发生服务中断。

下面的示例配置测试命令将返回一个AH00526错误消息,并解释可能的问题是Apache引用了一个空的SSLCertificateFile

1sudo apachectl configtest
1[secondary_label Output]
2AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/000-default.conf:
3SSLCertificateFile: file '/etc/ssl/certs/example.com.pem' does not exist or is empty

在此示例输出中,如错误消息所述,/etc/ssl/certs/example.com.pem文件不存在。向文件添加SSL/TLS证书或删除指令将解决此问题。

成功的apachectl figest调用应该会产生如下输出:

1[secondary_label Output]
2Syntax OK

结论

在本教程中,您学习了如何解决Apache AH00526语法错误。调查任何Apache错误的第一步是使用systemctl status apache2systemctl status httpd检查服务器的状态,具体取决于您的Linux发行版。从那里,您可以确定Apache是否正确运行,或者它是否因为错误而无法启动。

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

Published At
Categories with 技术
Tagged with
comments powered by Disqus