proxy_read_timeout用于控制Nginx与后端建立连接后等待响应数据的最长时间,超时返回504;需在location或server块中配合proxy_pass使用,默认60秒,设为0禁用但不推荐。

在 Nginx 中配置 proxy_read_timeout,是为了控制 Nginx 与后端服务器建立连接后,等待后端返回响应数据的最长时间。如果后端在该时间内没有发送任何数据(包括响应头或响应体),Nginx 就会主动关闭连接,并返回 504 Gateway Timeout。
作用范围和生效位置
proxy_read_timeout 必须放在启用代理的上下文中,常见于 location 或 server 块内,且需配合 proxy_pass 使用才生效。它不影响 DNS 解析、TCP 连接建立或 SSL 握手阶段,只管“已连接后等数据”的这段时间。
- 默认值是 60 秒
- 单位是秒(可带小数,如
30.5) - 设为
0表示禁用超时(不推荐,易导致连接堆积)
基础配置写法
在 location 块中添加即可:
location /api/ {
proxy_pass http://backend;
proxy_read_timeout 90;
}
这里表示:所有以 /api/ 开头的请求,转发到 backend,并允许最多等待 90 秒的后端响应数据。
配合其他超时参数更合理
单独调大 proxy_read_timeout 可能不够,建议同步检查以下三项,避免因其他环节超时而提前中断:
-
proxy_connect_timeout:Nginx 连接后端的超时(默认 60s),一般设为 5–10s 即可 -
proxy_send_timeout:Nginx 向后端发送请求体时的超时(比如上传大文件),默认 60s -
send_timeout(非 proxy):Nginx 向客户端发送响应的超时,影响浏览器接收过程
例如长轮询或导出接口场景:
location /export/ {
proxy_pass http://app;
proxy_connect_timeout 10;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
验证是否生效
可通过日志确认超时行为:
- 开启
error_log级别为info或更高,超时时会记录upstream timed out - 在后端故意延迟响应(如用
sleep(120)),观察 Nginx 是否在设定时间后返回 504 - 注意:若后端已发响应头但迟迟不发响应体,
proxy_read_timeout仍会触发;但如果响应头已收到,Nginx 就认为“读取完成”,后续传输由send_timeout控制


















