NGINX反向代理:很多html状态代码400响应,为什么?

我们最近实现了一个基于nginx反向代理

在debugging我们的访问日志的同时,我们看到了相当多的状态代码400的结果。

他们看起来像这样:

[07/Sep/2011:05:49:04 -0700] - "400" 0 "-" "-" "-" 

我们已经启用了debugging错误日志logging,并且他们通常对应于这样的东西:

 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

要么

http://blog.craz8.com/articles/2009/06/17/nginx-400-bad-request-errors-due-to-cookies-and-what-to-do-about-them

无济于事。

为什么发生这种情况?

这是一个退缩的nginx反向代理 – > apache后端服务器。

值得一提的是,我们网站上的独特内容types是相当less的。 我们已经使用许多浏览器testing了这个,并且没有亲自接收这400个结果中的任何一个。

谢谢!


更详细的url详细logging日志中的类似条目:

http://blog.rayfoo.info/2009/10/weird-web-server-access-log-entries

我发现这是由于使用Chrome ,这显然打开额外的连接,偶尔没有发送任何数据。

这里有一些更多的信息: http : //www.ruby-forum.com/topic/2953545

现在的问题是如何处理它们 – 答案并不是很令人满意。

你正在处理SSL连接? 你可以添加$ssl_cipher $ssl_protocol到你的访问日志格式?

首先,您的客户很可能会发送带有很大的http头或网址的请求。 也许你的应用程序的旧版本设置了一些(可能是大的)现在没有使用的cookie,有些客户端仍然在尝试发送它们。

我将头缓冲区设置为一个非常大的值,并在应用程序方面记录头/请求的大小和完整的请求,如果他们比平常大。 或者完全从链中取出nginx,并以相同的条件记录标题/请求。 如果可以的话,只需将那些出现400错误的IP /子网的nginx取出。 我想Nginx可以记录这些400错误的源IP。