如何读取nginx的access.log文件?

6

我的服务器是在Docker上编译的。

Nginx容器是从标准组件构建的。

我想读取nginx的access.log,但我看到了这种内容:

172.68.244.173 - - [24/Aug/2018:12:14:04 +0000] "\x16\x03\x01\x00\xEC\x01\x00\x00\xE8\x03\x03\x8A?\xB5\xFA\x17?\x8A\x9B\x04T>yK\x1A\xF6\x8F_\xBE:.\xF9\xED\xF6\xEE\xFCM\xD0\x88Ji\xDD\xF5 \xFF\xBDm\x98@mo:U\xA6\x0E\xB7\x93\x02sm`\xC6\xD1s0vV*\x88y\xDA&\xFCfZ\xF4\x00\x16\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0\x13\x00\x9C\x00/\xC0(\x005\x00" 400 173 "-" "-"

如何阅读这样的日志?这是什么意思?

服务器收到了一些二进制垃圾并响应了400(错误请求)。这可能是尝试查找已知漏洞或仅是https客户端尝试连接到http服务器的尝试。 - Richard Smith
1个回答

11
根据nginx文档,默认的访问日志格式为:
log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

应用于您的日志行:

$remote_addr = 172.68.244.173  
(literal string for compatibility reasons) = -  
$remote_user (from Auth Header) = -  
$time_local = [24/Aug/2018:12:14:04 +0000]  
$request = "\x16\x03\x01\x00\xEC\x01\x00\x00\xE8\x03\x03\x8A?\xB5\xFA\x17?\x8A\x9B\x04T>yK\x1A\xF6\x8F_\xBE:.\xF9\xED\xF6\xEE\xFCM\xD0\x88Ji\xDD\xF5 \xFF\xBDm\x98@mo:U\xA6\x0E\xB7\x93\x02sm`\xC6\xD1s0vV*\x88y\xDA&\xFCfZ\xF4\x00\x16\x13\x01\x13\x02\x13\x03\xC0+\xC0/\xC0\x13\x00\x9C\x00/\xC0(\x005\x00"  
$status = 400  
$body_bytes_sent = 173  
$http_referer = "-"  
$http_user_agent = "-"

总结一下:您的服务器收到了来自地址为172.68.244.173的请求,没有发送user agent头,并且请求主要由不可打印字符组成。有一定可能是一个损坏的客户端发送了错误的请求,更可能是尝试发现您的Web服务器或应用程序中的漏洞。这种情况在互联网上的任何服务器上都会经常发生。

谢谢您的回答。有没有办法将十六进制转换为 ASCII 或文本(有意义的内容)以供 $request 使用?我想尽可能解析信息。 - Mario
它以ASCII文本形式显示。您可以在请求字符串中识别字符,例如“@mo:U”。不表示ASCII字符的字节将显示为其十六进制值。 - virullius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接