我的设置由两个 Apache 服务器组成,如下图所示:
|Apache | >==Reverse Proxy Connection====> |Apache |
|Server1| <==Response through conntrack==< |Server2|
HTTP 连接成功后服务器 1到服务器 2,后者发送一个TCP [FIN,ACK]
数据包。
此数据包已正确确认服务器 1用数据TCP [ACK]
包。连接现在处于CLOSE-WAIT
状态。
然后,大约600秒后,服务器 1发送TCP [FIN,ACK]
至服务器 2,其回应为TCP [RST]
。
此数据包被 conntack 标记为“无效”,并且永远不会到达服务器 1(由于 iptables 规则),导致服务器 1重传数据TCP [FIN,ACK]
包超过 20 次。这是因为 nf_conntrack 对于该CLOSE-WAIT
状态下的 TCP 连接有 60 秒的超时限制。
- 为什么 Apache 会让 TCP 连接处于关闭等待状态那么长时间,而对方又会用 RST 进行响应?