反向代理请求经历连接上游、发送请求、等待上游数据和向客户端发送响应等阶段。502、504等结果只是外部表现,不能直接说明是网络还是应用处理慢。先用错误日志与分段耗时指标定位阶段,再判断是否需要改配置或修复上游。
proxy_connect_timeout限制与上游建立连接所等待的时间。检查Nginx错误日志中的上游地址和错误文本,并结合$upstream_addr、DNS解析、端口监听及网络访问控制判断。连接被拒绝通常意味着目标端口没有接受连接或路径策略拒绝;连接超时则可能涉及路由、防火墙丢包、上游过载或地址不可达。仅增加等待时间无法修复拒绝连接,也可能让排队请求积累。
若上游使用域名,确认Nginx实际解析到预期地址;若使用多个后端,比较不同地址的连接结果。看请求是否集中在特定实例,避免只测试一台健康机器就断定上游池正常。
proxy_read_timeout通常关注两次连续读取上游数据之间的空闲时间,而非整个请求的总耗时。上游首字节迟迟未返回时,可能是应用线程池、数据库查询、锁等待或外部依赖变慢。流式响应持续输出时,总时长虽长,读取间隔仍可能未超时。应比较$upstream_connect_time、$upstream_header_time、$upstream_response_time和$request_time,并用应用请求ID对应日志。
如果连接时间低而头部时间高,优先查应用处理和依赖;若连接时间本身高,检查网络和上游连接容量。响应时间多个上游值时要结合重试行为解读,日志格式应清晰区分各次尝试。
对照异常接口、请求体大小、高峰时段、上游实例和应用日志。上传请求还要检查客户端发送、请求缓冲和磁盘临时空间;大响应则关注上游输出速率与客户端消费速度。长时间计算若可异步化,可先返回任务标识并让客户端查询结果。无限增大超时会占用连接和工作资源,使拥塞持续更久。
连接超时回答“有没有连上”,读取超时回答“连上后多久收到数据”;分清这两个问题,才能选择网络修复、应用优化或合理的等待策略。✅