client_body_timeout 控制 nginx 接收请求体时两次数据包间的最大空闲时间,非总上传时限;仅在读取 body 阶段生效,超时即返回 408;默认 60s,可设于 http/server/location 块,单位 s/ms,需配合 client_max_body_size 使用。

client_body_timeout 控制的是 Nginx 接收客户端请求体(request body)时,两次数据包之间允许的最大空闲时间,不是整个上传耗时上限。它只在请求头已接收完毕、开始读取 body 阶段生效;一旦客户端断续发送数据,每次间隔超过该值,Nginx 就会中断连接并返回 408 Request Time-out。
配置位置与语法
该指令可放在 http、server 或 location 块中,优先级按嵌套层级由内向外继承:
- 语法:
client_body_timeout <time>;</time>(支持单位 s、ms,如30s、30000ms) - 默认值:
60s - 示例:
client_body_timeout 300s;(适用于大文件上传场景)
关键行为说明
这个超时不关心“总共传了多久”,只盯住“停顿了多久”:
- 用户上传一个 500MB 文件,若网络稳定、持续发送,哪怕耗时 8 分钟也不会触发超时
- 但若中途卡顿 31 秒(设为 30s),Nginx 就会立即关闭连接,不管前面已传多少
- 它和
client_max_body_size配合使用:后者限制大小,前者约束节奏
常见业务推荐值
根据实际网络条件与业务类型调整,避免过短丢请求、过长留隐患:
- 普通网页表单提交:10–20 秒
- 后台 CMS 或含文件上传的系统:300 秒(5 分钟),覆盖百 MB 级上传
- 移动端接口(弱网波动大):60 秒,兼顾 TLS 握手延迟与代理重传
- 纯 API 接口(无上传):可设为 10–15 秒,减少慢速攻击风险
调试与验证方法
修改后需重载生效,并观察日志确认是否起作用:
- 执行
nginx -t && nginx -s reload - 检查 error log 中是否出现类似记录:
client timed out (110: Connection timed out) while reading client request body - 用 curl 模拟慢速上传测试(如配合
--limit-rate限速 + 延迟发送)











