大文件上传超时的根本原因是nginx在特定环节主动断连,需在location块中精准配置proxy_read_timeout、proxy_send_timeout、client_body_timeout、fastcgi_read_timeout(php场景)及proxy_connect_timeout等参数。

大文件上传时出现超时,根本原因不是 Nginx “卡住了”,而是它在某个环节等不及响应或数据到达,主动断开连接。关键不在全局调大,而是在真正处理上传请求的 location 块里,精准延长几个核心超时参数。
必须在 location 块里配 proxy_read_timeout 和 proxy_send_timeout
这两个值控制 Nginx 与后端交互的等待时间:
- proxy_read_timeout:Nginx 等待后端返回第一个字节的最长时间。上传完成后后端还要校验、转码、落盘,这个阶段最容易超时。默认 60 秒对大文件远远不够。
-
proxy_send_timeout:Nginx 向后端发送完整请求体(即整个文件)的超时。网络抖动或后端接收慢时,它可能比
proxy_read_timeout更早触发中断。
正确写法(例如针对上传接口 /api/upload):
proxy_pass http://backend;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
别忘了 client_body_timeout:防上传中途断连
这个参数管的是“客户端发数据”的节奏,不是总耗时。它定义两次数据包之间的最大空闲时间。弱网、移动网络或分片上传时,若中间停顿超过该值,Nginx 就会返回 408 或静默断开。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
建议设为 300~1800 秒(5~30 分钟),尤其支持断点续传时,必须确保间隔内有数据到达:
location /api/upload {client_body_timeout 1800;
# 其他 proxy_ 参数...
}
PHP 场景要同步改 fastcgi_read_timeout
如果后端是 PHP-FPM,所有 proxy_* 参数都不起作用,必须用 fastcgi_read_timeout:
fastcgi_pass php-fpm;
fastcgi_read_timeout 300;
}
同时确认 PHP 层没卡住:
– 修改 /etc/php/*/fpm/php.ini 中 max_execution_time = 300
– 检查 /etc/php/*/fpm/pool.d/www.conf 中 request_terminate_timeout ≥ 300(它优先级更高)
跨机房或冷启动服务需调 proxy_connect_timeout
这个值控制 Nginx 连接后端的超时。若后端部署在异地云厂商、Java 应用冷启动要 90 秒、或 TLS 握手慢,60 秒默认值很可能不够:
- 跨机房建议设为 180;
- 已知后端启动耗时 90 秒,该值至少设为 95 以上;
- 必须显式写在对应
location块中,否则不生效。










