超时参数在控制什么
超时参数决定连接与请求在多长时间内没有进展就被中断,通常分为建立连接、读取响应、发送请求与空闲保持几类。设得过短,后端慢接口的正常响应会被打断;设得过长,慢速连接可以长期占用资源。合理做法是让超时预算匹配后端接口的真实耗时分布,对个别慢接口单独配置。
基本信息
| 参数类别 | 连接超时、读超时、写超时、空闲超时 |
|---|---|
| 匹配原则 | 超时值应高于对应接口正常响应时间的上界 |
| 与加固的关系 | 缩短超时本身就是慢速攻击的缓解手段之一 |
| 例外 | 导出、报表、批处理类接口单独设置更长时间 |
典型使用场景
- 新业务接入:按接口实测响应时间设置,而不是沿用默认值
- 慢接口排障:区分是后端本身慢还是代理层超时中断
- 慢速攻击防护:缩短读超时降低攻击收益
- 长连接业务:WebSocket、推送类接口需要单独配置空闲超时
- 容量优化:连接数接近上限时回收空闲连接可以释放资源
nginx 参考配置
nginx 参考配置
# 与上游建立连接的超时,反映后端可达性
proxy_connect_timeout 10s;
# 读取上游响应的超时,慢接口需单独放大
proxy_read_timeout 60s;
# 向上游发送请求的超时
proxy_send_timeout 60s;
# 长连接空闲保持时间,兼顾性能与连接回收
keepalive_timeout 65s;
# 导出报表类 location 可单独放宽 proxy_read_timeout 到 300s参数与取舍
| 参数 | 过短的后果 | 过长的后果 |
|---|---|---|
| proxy_connect_timeout | 上游正常但建连稍慢即失败 | 故障上游长期拖住连接 |
| proxy_read_timeout | 导出类接口中途被中断 | 慢速连接可长期占用资源 |
| keepalive_timeout | 连接频繁重建,性能下降 | 空闲连接占用资源与端口 |
超时类故障常表现为偶发失败:平时正常,遇到数据量大的请求才中断,因此要按业务峰值而不是平均值设定预算。