reset_timedout_connection 只能在 server 或 location 块中启用,用于对空闲超时的 Keep-Alive 连接发送 TCP RST 快速释放资源,依赖 keepalive_timeout 配置且不适用于短连接或传输中连接。

reset_timedout_connection 是 Nginx 中一个用于主动关闭空闲超时连接的指令,但它**不能在 http 块中配置**,只能在 server 或 location 块中使用。
它实际的作用和适用场景
该指令启用后,Nginx 会在客户端连接空闲超时(由 keepalive_timeout 控制)时,不是简单地断开 TCP 连接,而是发送一个 TCP RST 包强制重置连接。这能更快地释放服务端资源,避免连接停留在 CLOSE_WAIT 或 TIME_WAIT 状态过久。
但注意:它只对启用了长连接(Keep-Alive)且已空闲超时的连接生效,不适用于短连接或正在传输数据的连接。
正确配置位置和写法
必须放在 server 或 location 块内,例如:
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;">keepalive_timeout 30s;
reset_timedout_connection on; # ✅ 正确:在 server 块中
location /api/ {
reset_timedout_connection off; # ❌ 可选:在特定 location 关闭
proxy_pass http://backend;
}}
配合 keepalive_timeout 使用才有效
reset_timedout_connection 的行为依赖于 keepalive_timeout 的设置。如果后者为 0(禁用长连接),该指令无实际效果。
- 保持
keepalive_timeout合理(如 15–60 秒),避免过长导致连接堆积 - 开启
reset_timedout_connection on可加快异常空闲连接的清理速度 - 某些负载均衡器或客户端对 RST 敏感,开启前建议在测试环境验证兼容性
常见误区提醒
- ❌ 不要写在
http块顶层:Nginx 启动会报错"reset_timedout_connection" directive is not allowed here - ❌ 不是“释放所有超时连接”的万能开关,它仅影响 Keep-Alive 空闲连接
- ❌ 不替代
proxy_read_timeout或client_header_timeout等请求级超时控制


















