Nginx的499错误代码

我得到了很多499 nginx错误代码。 我看到这是一个客户端问题。 这不是Nginx或我的uWSGI堆栈的问题。 我注意到uWSGI日志中的相关性,当得到一个499。

address space usage: 383692800 bytes/365MB} {rss usage: 167038976 bytes/159MB} [pid: 16614|app: 0|req: 74184/222373] 74.125.191.16 () {36 vars in 481 bytes} [Fri Oct 19 10:07:07 2012] POST /bidder/ => generated 0 bytes in 8 msecs (HTTP/1.1 200) 1 headers in 59 bytes (1 switches on core 1760) SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /bidder/ (ip 74.125.xxx.xxx) !!! Fri Oct 19 10:07:07 2012 - write(): Broken pipe [proto/uwsgi.c line 143] during POST /bidder/ (74.125.xxx.xxx) IOError: write error 

我正在寻找一个更深入的解释,并希望它是没有错误的uwsgi我的nginxconfiguration。 我正在考虑面值…它不是我的问题..客户端问题。

谢谢

Nginx的HTTP 499意味着客户端在服务器回应请求之前closures连接 。 根据我的经验,通常是由客户端超时造成的。 据我所知这是一个Nginx特定的错误代码。

就我而言,我很不耐烦,最终误解了日志。

实际上真正的问题是nginx和uwsgi之间的通信,而不是浏览器和nginx之间的通信。 如果我在浏览器中加载网站,并等待足够长时间,我会得到一个“504 – 错误的网关”。 但花了这么长时间,我一直在尝试的东西,然后在浏览器刷新。 所以我从来没有等待足够长的时间来看到504错误。 在浏览器中刷新的时候,就是前一个请求被closures的时候,Nginx把这个日志写成499。

在这里,当我开始玩耍的时候,我会假设读者和我一样聪明。

我的设置是一个反向代理,nginx服务器和一个应用程序服务器,uWSGI服务器。 来自客户端的所有请求都会转到nginx服务器,然后转发到uWSGI服务器,然后以相同的方式发送响应。 我想这是每个人使用nginx / uwsgi,并应该使用它。

我的nginx正常工作,但uwsgi服务器出了问题。 uwsgi服务器有两种方法(可能更多)可能无法响应nginx服务器。

1)uWSGI说:“我正在处理,只是等待,你很快就会得到答复”。 nginx有一定的时间,那肯定是等了20秒。 之后,它会响应客户端,504错误。

2)uWSGI已经死机,或者nginx正在等待uWSGi死机。 nginx会马上看到,在这种情况下,它将返回一个499错误。

我通过在客户端(浏览器)发出请求来testing我的设置。 在浏览器中什么都没有发生,它只是一直挂着。 大概10秒后(小于超时时间),我断定某些事情不对(这是真的),并从命令行closures了uWSGI服务器。 然后,我将转到uWSGI设置,尝试新的操作,然后重新启动uWSGI服务器。 当我closuresuWSGI服务器时,nginx服务器将返回一个499错误。

所以我一直在用499 erroe进行debugging,这意味着用499的错误search。 但如果我等了很长时间,我会得到504错误。 如果我得到了504错误,我将能够更好地理解这个问题,然后能够进行debugging。

所以得出的结论是,问题是uWGSI一直挂着(“等一会儿,再长一点,然后我会给你一个答案……”)。

我如何解决这个问题,我不记得了。 我想这可能是由很多东西造成的。

客户closures连接并不意味着它是一个浏览器问题! 一点也不!

如果您的Web服务器(nginx)在AWS或haproxy(自定义)之前有LB(负载均衡器),则可以在日志文件中find499个错误。 这就是说,LB将作为nginx的客户端。

如果您运行haproxy默认值:

  timeout client 60000 timeout server 60000 

这意味着,如果没有来自nginx的回应,LB将在60000ms之后超时。 对于需要更多时间执行的繁忙网站或脚本,可能会发生超时。 你需要find适合你的超时时间。 例如将其扩展为:

  timeout client 180s timeout server 180s 

你可能会被设置。

根据您的设置,您可能会在浏览器中看到504网关超时错误,指出php-fpm有什么错误,但在日志文件中出现499错误时不会出现这种情况。

…从谷歌search来到这里

我在这里的其他地方find了答案 – > https://stackoverflow.com/a/15621223/1093174

这是提高我的AWS弹性负载平衡器的连接空闲超时!

(我已经用nginx / apache反向代理设置了一个Django站点,而且真正真正的日志后端作业/视图是超时的)

一旦我得到了499个“请求已被禁止杀毒软件”作为AJAX http响应(卡巴斯基互联网安全公司的误判,启发式分析,深层启发式分析正确无误)。

这种行为的原因之一可能是您使用http而不是socket uwsgi 。 如果您直接使用uwsgi请使用以下命令。

  uwsgi --socket :8080 --module app-name.wsgi 

.ini文件中的相同命令是

  chdir = /path/to/app/folder socket = :8080 module = app-name.wsgi 

我遇到了这个问题,原因是由于浏览器上的卡巴斯基保护插件。 如果您遇到这种情况,请尝试禁用您的插件,看看是否可以解决您的问题。

很多情况下会导致499错误,我的情况之一就是,来自pocco客户端的http请求中缺lessContent-Length字段