问题:我们已经建立了一个CDN提供者作为我们的静态映像文件服务器的代理。几个小时后,我们经历了大量的TCP,SYN下降率和异常高数量的孤立连接。
观察是为了解决这个问题:我捕获了1.5秒的服务器流量,并检查了一些图像下载。令人怀疑的是,nginx --它几乎配置了缺省值--正在响应CDN服务器的FIN数据包,而不是使用FIN/ACK。在nginx的ACK之后,连接端口上会有整整一秒的沉默,这意味着服务器没有什么可以发送的了。由于交通拥堵,我无法捕捉超过1.5秒。
下面是一个示例TCP连接的摘要:
No. Time Source Destination Proto Length and Info
20 0.004281671 [CDN IP] [NGINX IP] TCP 74 20200 → 443 [SYN] Seq=0 Win=28400 Len=0 MSS=1420 SACK_PERM=1 TSval=2822189024 TSecr=0 WS=1024
21 0.004333161 [NGINX IP] [CDN IP] TCP 74 443 → 20200 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=2611883387 TSecr=2822189024 WS=128
372 0.125341624 [CDN IP] [NGINX IP] TCP 66 20200 → 443 [ACK] Seq=1 Ack=1 Win=28672 Len=0 TSval=2822189148 TSecr=2611883387
373 0.125357371 [CDN IP] [NGINX IP] TLSv1.2 287 Client Hello
374 0.125367976 [NGINX IP] [CDN IP] TCP 66 443 → 20200 [ACK] Seq=1 Ack=222 Win=30080 Len=0 TSval=2611883417 TSecr=2822189149
392 0.127328681 [NGINX IP] [CDN IP] TLSv1.2 2882 Server Hello, Certificate
393 0.127339623 [NGINX IP] [CDN IP] TLSv1.2 233 Server Key Exchange, Server Hello Done
645 0.244326565 [CDN IP] [NGINX IP] TCP 66 20200 → 443 [ACK] Seq=222 Ack=2984 Win=34816 Len=0 TSval=2822189267 TSecr=2611883418
646 0.244353033 [CDN IP] [NGINX IP] TLSv1.2 192 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
647 0.244630520 [NGINX IP] [CDN IP] TLSv1.2 324 New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
1121 0.360323576 [CDN IP] [NGINX IP] TLSv1.2 1496 Application Data
1122 0.360373767 [NGINX IP] [CDN IP] TCP 66 443 → 20200 [ACK] Seq=3242 Ack=1778 Win=33024 Len=0 TSval=2611883476 TSecr=2822189383
1123 0.360539425 [NGINX IP] [CDN IP] TLSv1.2 392 Application Data
1124 0.360614290 [NGINX IP] [CDN IP] TLSv1.2 97 Encrypted Alert
1554 0.477351117 [CDN IP] [NGINX IP] TCP 78 [TCP Window Update] 20200 → 443 [ACK] Seq=1778 Ack=3242 Win=40960 Len=0 TSval=2822189500 TSecr=2611883447 SLE=3568 SRE=3600
1555 0.477369934 [CDN IP] [NGINX IP] TCP 66 20200 → 443 [ACK] Seq=1778 Ack=3600 Win=43008 Len=0 TSval=2822189501 TSecr=2611883476
1596 0.505356016 [CDN IP] [NGINX IP] TCP 66 20200 → 443 [FIN, ACK] Seq=1778 Ack=3600 Win=43008 Len=0 TSval=2822189530 TSecr=2611883476
1597 0.505368886 [NGINX IP] [CDN IP] TCP 66 443 → 20200 [ACK] Seq=3600 Ack=1779 Win=33024 Len=0 TSval=2611883512 TSecr=2822189530另外,我猜CDN服务器使用HTTP保持活动头。我不确定的分析是,CDN方面的错误配置使它能够为每个图像使用一个连接,以及发送保持活动的头。它使nginx使TCP保持活跃,FIN数据包仅由ACK响应。然后,解决办法是将nginx保持存活的超时时间减少到1秒。
问题是:造成这个问题的确切原因是什么?或者我应该改变什么来解决这个问题呢?
发布于 2020-06-15 05:26:42
在我检查了请求的内容后,nginx的行为是由于CDN的行为造成的。因为CDN使用的是“保持活动”连接,而在nginx中保持活动连接的持续时间设置为60岁左右。当我把这个降到15秒时,情况就恢复正常了。
发布于 2019-11-23 16:03:24
你想要解决的问题是什么?
孤立连接和"SYN“并不是真正的问题。NGINX对这些细节的关注很少,据我所知。
你增加了一个CDN。而且CDN不是用户。因此,它的行为是不同的。
您可能正在耗尽池中的连接空间。增加这一点。
请张贴更多的具体问题,以进一步澄清。
https://serverfault.com/questions/993021
复制相似问题