2011-09-07 199 views
12

我们最近实现了一个基于nginx的反向代理。NGINX反向代理:很多html状态代码400响应,为什么?

在调试我们的访问日志时,我们看到了很多状态码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

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

无济于事。

这是怎么发生的?

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

值得一提的是,我们网站上的独特内容类型非常少。我们使用许多浏览器测试过这些,并且没有亲自接收这400个结果中的任何一个。

谢谢!


而且网址在其日志中详细说明类似的条目:

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

+0

是第一个记录你的Apache日志和第二个nginx的? – palacsint

+0

否定的。第一个是nginx访问日志,第二个是设置为调试的nginx错误日志。 –

+1

您是否支持EC2 Elastic Load Balancer?部分健康检查会导致这些记录经常记录在日志中。 – Meekohi

回答

0

首先,这是相当有可能是你的客户发送带有非常大的HTTP头或URL请求。也许你的应用程序的旧版本设置了一些(可能是大的)现在未被使用的cookie,并且一些客户端仍在尝试将它们发送回去。

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

+0

尝试将最大标题大小设置为2048k。同样的问题依然存在。因为这种情况发生得相当频繁,所以尝试做一些tcpdump运行......即使这是在一个非常活跃的生产服务器上运行2-3分钟,也不应该使该盒超载。 –

+0

恩,2097152字节应该足够用于任何http请求。 tcpdump是个好主意。让我知道如果你找到一些东西。 – palacsint

1

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

8

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

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

现在的问题是如何处理他们 - 答案只要不是很令人满意。