最有效、最安全的改法是在对应location块内显式设置proxy_read_timeout具体正整数值,如/ws/设3600、/api/v1/export设300,避免全局配置误伤其他接口;须同步配置proxy_send_timeout、proxy_http_version 1.1、upgrade和connection头、proxy_buffering off等配套项,并执行nginx -t && nginx -s reload生效。

直接在对应 location 块里显式设置 proxy_read_timeout 的具体正整数,是最有效、最安全的改法。别写在 http 或 server 级,否则容易误伤其他接口,也起不到精准控制作用。
必须写在 location 块内,不能全局覆盖
这个值只对匹配该路径的请求生效。比如 WebSocket 接口走 /ws/,报表导出走 /api/v1/export,就得分别配:
location /ws/ { proxy_pass http://go-backend; proxy_read_timeout 3600; ... }location ^~ /api/v1/export { proxy_pass http://report-service; proxy_read_timeout 300; ... }
写在 http 或 server 里,所有子 location 都会继承,可能让普通 API 也等太久,拖慢整体响应。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
数值不是越大越好,要匹配业务节奏
设太小会误杀正常请求;设太大则浪费连接资源,还延迟故障暴露。参考这些典型场景:
- WebSocket 心跳间隔 30 秒 → 设
proxy_read_timeout 90(留出网络抖动余量) - 工控设备每 45 秒上报一次 → 设
180 - 大报表 P99 耗时 240 秒 → 设
300(加 60 秒缓冲) - 低频通知通道 →
3600足够,再大没实际意义
单改 proxy_read_timeout 不行,得配齐配套项
它只是“读超时”,单独调大只是纸面功夫。下面这些必须同步配置,缺一不可:
-
proxy_send_timeout设为和proxy_read_timeout相同值,避免请求发一半被切断 -
proxy_http_version 1.1—— WebSocket 和长连接都依赖它 -
proxy_set_header Upgrade $http_upgrade;和proxy_set_header Connection "upgrade";—— 否则 WebSocket 握手失败 -
proxy_buffering off;和gzip off;—— 避免 Nginx 缓存干扰流式数据或心跳帧
改完必须 reload,不能只重载配置
修改后执行:nginx -t && nginx -s reloadnginx -s reload 是热重载,但超时类配置必须完整 reload 才生效。只改配置不 reload,等于没改。










