nginx出现499错误码的原因以及proxy_ignore_client_abort配置

最近发现服务器上出现很多499的错误,出现499错误的原因是客户端关闭了连接,在我这篇文章:服务端在执行时中途关闭浏览器退出之后php还会继续执行吗?个人实践实验得到结果(http://www.04007.cn/article/356.html )里,测试中断时,服务器nginx的日志就是499记录。nginx报49*错误

400-499 用于指出客户端的错误。 (自己电脑这边的问题) 自己电脑这边的问题) 

495 :https certificate error
496 :https no certificate
497 :http to https
498 :canceled
499 :client has closed connection
    即499错误是客户端主动断开了连接。 如何关闭报499这个错误码呢?可以通过配置:proxy_ignore_client_abort来处理。
    proxy_ignore_client_abort:是否开启proxy忽略客户端中断。即如果此项设置为on开启,则服务器会忽略客户端中断,一直等着代理服务执行返回。并且如果执行没有发生错误,记录的日志是200日志。如果超时则会记录504。如果设置为off,则客户端中断后服务器端nginx立即记录499日志,但要注意,此时代理端的PHP程序会依然继续执行。可查看上面写的那篇文章。
    nginx的proxy_ignore_client_abort默认是关闭的,即请求过程中如果客户端端主动关闭请求或者客户端网络断掉,那么Nginx会记录499。所以如果不想看到499报错,可以修改配置:
proxy_ignore_client_abort on ;
    这样来说,499错误并不是一个问题,如果出现了大量的499的话,需要考虑为什么发生了这么多的客户端中断的问题。

    另外需要注意的一项是:proxy_ignore_client_abort配置只会对代理的配置,如果请求的是当前nginx服务器,直接执行PHP程序返回。则设置proxy_ignore_client_abort为on也不会起作用,仍会是记录499日志。proxy_ignore_client_abort的配置是配置在代理处理时用。如下:


location =/b.php { 
    proxy_ignore_client_abort   on; 
    proxy_pass  http://service_backends;}


本文地址:http://www.04007.cn/article/360.html 未经许可,不得转载.


本文转自 Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1963776


上一篇:MySQL迁移DM全过程记录


下一篇:在使用 POP 的其他电子邮件客户端上阅读 Gmail 邮件