nginx 检测死客户端

nginx 检测死客户端

通常,当您从网络设备中拔出网线时(这模拟了网络上的某些断开连接,因此是一种不明显的断开连接),底层套接字不会检测到断开连接(至少我们的设备不会),所以我们使用保持活动来断开连接并重新连接。

所有单元都使用每小时对 nginx 服务器进行长轮询。所以我的问题是:

如果设备没有检测到电缆断开(并且可能还有网络上的其他 100 种情况),那么 nginx 也不会断开套接字并且该套接字保持打开状态?

营业多久?

我们是否也应该在 nginx 端对客户端使用 tcp keep alive?该怎么做?

答案1

您需要 TCP keepalive 才能检测到此类中断。套接字只是一个抽象概念,只有当连接中的数据包传输失败时,套接字才会关闭。

长轮询情况下,没有数据包传输,因此 TCP 状态机无需对任何数据包丢失事件做出反应。

因此您需要在网络堆栈上启用 TCP keepalive:

sysctl -w net.ipv4.tcp_keepalive_time = 600
sysctl -w net.ipv4.tcp_keepalive_intvl = 60
sysctl -w net.ipv4.tcp_keepalive_probes = 5

第一个值指定在发送保持活动探测之前连接必须空闲多长时间。

第二个值指定一旦触发发送,应多久发送一次保活探测。

最后一个值表示在连接被视为断开之前必须失败多少个探测数据包。

sysctl修改运行配置。您需要参考发行版的文档来了解如何使其持久化。

相关内容