Apache的故障排除技巧

2020.04.03 -

   

年复一年, Apache仍然是全球最受欢迎和使用最广泛的Web服务器。但是,尽管它已经在业界得到了很好的证明,但Apache并非没有问题。在本文中,我将概述一些技巧,这些技巧可用于分析和修复Apache中遇到的最常见问题。

验证您的Apache HTTP Server配置

Apache HTTP Server问题也可能是由于Apache httpd.conf配置文件配置错误导致的。遍历整个配置文件以查找输入错误可能是一项繁琐的任务,但值得庆幸的是,Apache提供了一种扫描httpd.conf文件中语法错误的方法。这可以通过使用程序中的configtest工具来完成apachectl。对于Unix系统上的Apache,您需要apachectl –configtest从命令行执行;对于Windows系统上的Apache,您需要首先从命令行导航到Apache’bin’目录,然后执行httpd.exe –t

apache技巧Fig2

图1 – Apache HTTP Server在ServerTokens指令上发现语法错误

在上面的示例中,此工具在httpd.conf文件的第560行发现语法错误。看起来ServerTokens指令拼写错误,并且在’Tokens’部分的开头出现了一个额外的’t’。解决此问题后,其他问题可能仍然存在,因此建议您configtest在纠正问题并重新启动Apache之后重新运行该工具。

使用最新版本的Apache HTTP Server

旧版本的Apache HTTP Server可能包含一些错误,这些错误可能导致您遇到问题。此外,使用过时的Apache版本也可能导致安全漏洞。

Apache HTTP服务器日志

首先,应该分析Apache HTTP Server错误日志,因为它提供了有关Web服务器上发生的任何错误的详细信息。默认情况下,错误会记录在Apache根安装目录下的logs目录中的error_log文件中。还可以从Apache httpd.conf配置文件调整日志记录级别,以指定记录的错误类型。

将日志级别调整为更高级别可能会为您提供有关该问题的更多信息,但也会使您难于找到所需的信息。除了错误日志外,Apache还提供访问日志,该日志记录了服务器处理的所有请求。这些日志还可以提供有关可能导致该问题的原因的其他说明,并且还可以补充在错误日志中找到的信息。

使用mod_log_forensic模块

该mod_log_forensic模块用于提供客户端请求的法医记录。这包括在处理请求之前和之后记录请求,其中使用相同的ID引用相同的请求。因此,可以轻松地确定由特定请求引起的任何问题。这可以帮助分析哪些请求可能导致您的Web服务器停止或崩溃。要启用此模块,您需要在Apache httpd.conf配置文件中设置以下几行:

LoadModule log_forensic_module modules/mod_log_forensic.so

LoadModule unique_id_module modules/mod_unique_id.so

ForensicLog logs/forensic_log

另外,check_forensic Bash脚本可以与mod_log_forensic模块结合使用,以列出在取证日志中找到的所有不完整的请求。下面包括一个如何使用check_forensic工具的示例:

check_forensic <log_file>

使用mod_whatkilledus模块

当情况真的很糟糕并且Apache服务器崩溃时,可以使用mod_whatkilledus模块记录有关崩溃的详细技术信息以及引起该崩溃的原始客户端请求。此外,如果启用了mod_backtrace模块,则将包括显示故障点的回溯,这对于在满足某些条件后用回溯注释错误日志很有用。

对于Unix系统,只有--enable-exception-hookhttpd构建中启用了参数时,这些模块才起作用。另一方面,Windows系统没有特定要求。

apache服务器模块

mod_whatkilledus日志中的崩溃日志示例

检查第三方模块

第三方模块可能会导致您在Apache HTTP Server安装过程中遇到的问题。因此,您应该禁用所有第三方模块,并检查问题是否仍然可以重现。如果禁用这些模块可以解决问题,则可以尝试逐个重新启用每个模块,以便通过消除来确定哪个模块导致了问题。

以单个过程运行Apache HTTP Server并使用调试工具

典型的Apache HTTP Server安装需要几个进程。但是,为了简化故障排除,最好将Apache作为单个进程运行。这可以通过在启动Apache时使用X选项来完成。下面的示例将以单进程模式启动Apache,在该模式下,Apache将不会派生任何新的子代或从终端分离。

$ httpd –X

此后,所有流量和通信将通过一个过程,从而允许将故障排除过程用于单个过程,而不是多个过程。然后,您将能够在调试器下运行Apache httpd,获得崩溃的回溯,还可以强制服务器执行核心转储。

脚本执行问题

动态内容通常通过Apache HTTP Server通过mod_cgi模块执行的脚本来提供。该模块包括其自己的日志记录机制,用于记录在执行这些脚本期间遇到的任何错误。启用S​​criptLog指令后,mod_cgi将记录未按预期执行的所有脚本的输出,包括服务器响应代码,已接收的请求以及已发给客户端的任何响应。要启用此功能,您需要修改httpd.conf配置文件,并指定ScriptLog指令以及将保存日志的位置,如下所示。

ScriptLog logs/cgi_log

Apache社区资源

Apache是​​一个具有大型社区支持的开源项目,因此可以使用许多资源来解决Apache问题。最常见的是,问题已经在各个论坛或网站上得到记录,因此,简单的Google搜索可能会得出一些答案或建议。

本站文章禁止转载,违者必究
阅 227
0

年复一年, Apache仍然是全球最受欢迎和使用最广泛的Web服务器。但是,尽管它已经在业界得到了很 […]

湘公网安备 43011102001693号

    湘ICP备19003021号-1