Nginx控制客户端连接超时的核心参数是keepalive_timeout、client_header_timeout、client_body_timeout和send_timeout;前者管理长连接空闲超时,后三者分别限制请求头/体接收及响应发送的停顿超时,均建议在http块中配置并reload生效。

Nginx 主配置文件(通常为 /etc/nginx/nginx.conf)中,控制客户端连接超时自动断开的核心全局参数是 keepalive_timeout 和 client_header_timeout、client_body_timeout。它们作用不同,需配合设置才能有效管理空闲连接和请求阶段的超时行为。
keepalive_timeout:控制长连接空闲超时
该指令定义客户端与 Nginx 建立的 keep-alive 连接在无活动时的最大等待时间。超过此时间,Nginx 会主动关闭 TCP 连接。
- 语法:
keepalive_timeout timeout [header_timeout]; - 默认值:
keepalive_timeout 75s; - 推荐设置(平衡性能与资源):
keepalive_timeout 30s; - 若设为
0,则禁用 keep-alive,每次请求后立即断开
client_header_timeout 和 client_body_timeout:应对慢请求攻击
这两个参数不控制“连接空闲”,而是限制客户端发送请求头或请求体的耗时。若客户端迟迟不发完,Nginx 将直接关闭连接,防止资源被长期占用。
-
client_header_timeout 10s;:等待完整 HTTP 请求头的最长时间 -
client_body_timeout 10s;:接收请求体(如上传内容)的单次读取超时(非总时长),连续超时多次即断开 - 建议值一般为 5–15 秒;生产环境不建议设过高,尤其面对公网时
补充:send_timeout 控制响应下发超时
当 Nginx 向客户端发送响应时,若两次写操作间隔超过 send_timeout,连接会被关闭。适用于大文件传输或网络不稳定场景。
- 语法:
send_timeout 25s; - 默认值:
60s,可适当调低至25s或30s - 注意:它只影响已开始发送后的“停顿”,不控制整个响应耗时
配置位置与生效范围
上述指令应放在 http{...} 块内(全局生效),也可在 server{...} 或 location{...} 中覆盖。例如:
http {
keepalive_timeout 30s;
client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 25s;
<pre class="brush:php;toolbar:false;">server {
listen 80;
server_name example.com;
# 此处可单独覆盖:keepalive_timeout 15s;
}}
修改后需执行 nginx -t 检查语法,再 systemctl reload nginx 生效。











