proxy_read_timeout控制Nginx从后端读取响应的超时时间,需在location或server块中设置,配合proxy_connect_timeout和proxy_send_timeout协同使用,超时触发会返回504错误。

在 Nginx 反向代理中,proxy_read_timeout 控制的是 Nginx 从后端服务器读取响应的超时时间——即 Nginx 已建立连接并发送完请求后,等待后端返回完整响应的最长时间。超过该时间未收到数据(包括响应头或响应体),Nginx 会主动关闭连接,并可能返回 504 Gateway Timeout。
在哪里设置 proxy_read_timeout
该指令必须放在 location 块或 server 块中,不能出现在 http 全局块顶层(除非你明确希望所有代理都统一使用该值)。常见写法如下:
- 针对某个接口路径单独设置(推荐):
location /api/ {
proxy_pass https://backend-server;
proxy_read_timeout 60;
}
- 若后端是长轮询、SSE 或需保持较久连接的场景,可设为 300(5 分钟)甚至更高;
- 普通 REST 接口一般设为 30–60 秒足够;
- 设为 0 表示禁用超时(不建议,易导致连接堆积)。
和其它超时参数的关系
proxy_read_timeout 不是孤立的,需配合以下两个关键参数协同使用:
- proxy_connect_timeout:Nginx 与后端建立 TCP 连接的超时时间,默认 60s,通常设为 5–10s 即可;
- proxy_send_timeout:Nginx 向后端发送请求体的超时时间(如上传大文件),默认 60s;
三者分工明确:
先连(connect),再发(send),最后等回(read)。如果后端处理慢但连接正常,proxy_read_timeout 就是关键;如果连接迟迟建不上,要看 proxy_connect_timeout。
生效前提与调试建议
该配置仅对 proxy_pass 生效,且要求后端服务本身不提前中断连接。调试时注意:
- 修改后执行
nginx -t检查语法,再nginx -s reload热重载; - 观察 Nginx 错误日志(
error_log),出现upstream timed out且含read timeout字样,说明是proxy_read_timeout触发; - 确认后端实际响应耗时(如用 curl 测后端直连),排除是后端性能问题而非 Nginx 配置过短。


















