我们最近实施了一个基于nginx的反向代理。
在调试我们的访问日志时,我们看到了相当多的状态代码400结果。
它们看起来像这样:
[07/Sep/2011:05:49:04 -0700] - "400" 0 "-" "-" "-"
我们已启用调试错误日志记录,它们通常对应于以下内容:
2011/09/07 05:09:28 [info] 5937#0: *30904 client closed prematurely connection while reading client request line
我们已经尝试过提高一些缓冲区,正如我们能够谷歌的几页所提到的那样。
http://www.ruby-forum.com/topic/173362
或
无济于事。
为什么会这样?
这是一个strandard nginx反向代理 - > apache后端服务器。
值得一提的是,我们网站上独特的内容类型相当少。我们已经使用许多浏览器对此进行了测试,并且没有亲自接收这400个结果中的任何一个。
谢谢!
进一步详细说明日志中类似条目的网址:
http://blog.rayfoo.info/2009/10/weird-web-server-access-log-entries
答案 0 :(得分:8)
我发现这是由使用Chrome
引起的,显然偶尔会打开额外的连接,而不会发送任何数据。
以下是其他信息:http://www.ruby-forum.com/topic/2953545
现在的问题是如何处理它们 - 提供的答案并不令人满意。
答案 1 :(得分:1)
您是否正在处理SSL连接?您可以将$ssl_cipher $ssl_protocol
添加到访问日志格式吗?
答案 2 :(得分:0)
首先,您的客户端很可能使用非常大的http标头或网址发送请求。也许您的应用程序的旧版本设置了一些(可能很大)的cookie,这些cookie现在都没有使用,而且有些客户仍在尝试将它们发回去。
我将头缓冲区设置为一个非常大的值,并且在应用程序端记录头/请求的大小以及完整请求(如果它们比平常大)。或者从链中完全取出nginx并使用相同的条件记录标头/请求。如果可以,只为那些400错误来自的IP /子网取出nginx。我想nginx可以记录这400个错误的源IP。