Nginx 499 问题
场景#
项目发现某个接口异常,查看 nginx 日志是 499 错误,request_time 大概是 0.2s。谷歌后了解到 nginx 的 499 错误是用户主动断开连接导致的,哪怕接口并不是很慢。
如何模拟 499#
curl -m 0.01 "http://192.168.0.1/common/getDepart"
curl: (28) Operation timed out after 10 milliseconds with 0 bytes received
如何改进#
nginx 收到用户主动断开请求,默认是直接断开后端反向代理的。虽然用户那边已经无法改善,但是可以用 nginx 日志记录此次后端的真实响应过程(此次请求用户端虽然已经断开,nginx 也断开了后端代理,但是后端其实仍然完整处理了任务),比如 upstream_status 和 upstream_response_time(默认 nginx 都是记录的 -)。如何记录呢,在 nginx 配置文件的 server 端加上:
fastcgi_ignore_client_abort on; //如果后端是fastcgi,比如php-fpm
proxy_ignore_client_abort on; //如果后端是http服务
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: