如何通过 send_timeout 自动断开长时间无响应的僵尸连接

落婷君_2337

落婷君_2337

2026-05-11

720人浏览

原创

send_timeout仅控制发送响应体时两次写操作间的超时,不检测空闲僵尸连接;真正有效的是keepalive_timeout(控制HTTP keep-alive空闲时长)和TCP keepalive机制。

如何通过 send_timeout 自动断开长时间无响应的僵尸连接

通过 send_timeout 自动断开长时间无响应的僵尸连接,关键在于理解它的真实作用范围——它**只控制发送响应数据过程中的超时**,而非检测或清理空闲连接。真正用于应对僵尸连接(如客户端断开但服务端未感知、TCP 连接长期空闲)的是 keepalive_timeout 和 TCP 层的保活机制。

send_timeout 并不适用于“检测僵尸连接”

send_timeout(Nginx 中)定义的是:向客户端发送响应体(response body)时,两次成功写操作之间的最大等待时间。如果在这段时间内无法把数据发出去(比如客户端接收缓冲区满、网络卡顿、客户端已崩溃但 FIN 未到达),Nginx 就会关闭该连接。

但它不会在客户端完全不发请求、服务端也无响应要发的情况下触发;也就是说,对纯空闲连接(没有请求、也没有响应要发),send_timeout 完全不生效。

常见误用场景:
- 客户端建立连接后不发任何请求(SYN 已完成,但 HTTP 请求没来)→ send_timeout 不起作用
- 客户端收到响应后挂起,不再交互 → 若后续无新请求,send_timeout 也不介入

真正该配置的参数:keepalive_timeout

这是 Nginx 控制 HTTP keep-alive 连接空闲时长的核心指令。它决定了:一个 keep-alive 连接在处理完一次请求后,若无新请求到达,最多保持打开多久。

建议配置示例:

  • keepalive_timeout 15s; —— 连接空闲 15 秒后自动关闭
  • keepalive_requests 100; —— 单个连接最多处理 100 个请求(防止单连接长期占用)

该机制能有效回收那些“建连后不请求”或“请求后不继续”的半死连接,比依赖 send_timeout 更直接、更可靠。

补充:启用 TCP keepalive 提升底层健壮性

HTTP 层的 keepalive_timeout 依赖于上层活动,而操作系统 TCP keepalive 可在更底层探测死链(如中间网络中断、客户端硬断电)。需在 Nginx 配置中显式开启:

  • tcp_keepalive on;(Nginx 1.19.6+ 默认开启,旧版本需手动设)
  • 系统级调优(Linux):
    net.ipv4.tcp_keepalive_time = 600(首次探测前空闲秒数)
    net.ipv4.tcp_keepalive_intvl = 60(重试间隔)
    net.ipv4.tcp_keepalive_probes = 3(失败后重试次数)

注意:TCP keepalive 探测周期较长(默认 2 小时),适合防“长周期静默断连”,不适合替代 HTTP 层的快速超时策略。

辅助手段:限制连接生命周期与资源占用

除了超时,还可从连接来源和行为维度抑制僵尸连接影响:

  • 用 limit_conn 限制单 IP 并发连接数,防止慢速攻击耗尽连接槽位
  • 搭配 limit_req 限制请求频率,避免恶意空连接反复建立
  • 日志中关注 $connection_requests 和 $request_time,识别异常长连接或零请求连接

这些不直接“断开”连接,但能降低僵尸连接对服务整体可用性的影响。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

960

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3292

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1076

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

969

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

514

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

3016

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

5672

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

867

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习