症状
nginx 访问日志出现大量 499,而客户端报告超时。499 表示 nginx 因客户端关闭而关闭连接,发生在客户端在上游应答前停止等待时。它本身不是后端故障,但指向相对于客户端超时与代理设置而言过慢的响应。
诊断
把 499 与请求耗时关联;对比客户端与上游超时;直接测量慢端点耗时。
awk '{print $9, $NF}' access.log | grep 499 | head
根因
nginx 记录 499,因为客户端在 nginx 收到上游响应前关闭了连接,通常由于客户端超时短于后端响应时间。
修复
降低后端响应时间;对齐客户端与代理超时,使代理等待不超过客户端愿意等待的时间;对天然较慢的端点用后台处理或缓存使响应落在客户端预算内。仅调超时不降延迟只是移动边界。
验证
重跑代表性流量确认 499 下降,并确认慢端点可在客户端超时内返回。客户端中断减少且响应及时即证明修复。
常见陷阱
把代理超时设得远大于客户端超时会让慢请求堆积并浪费后端资源;应两端对齐。