![本地主机向本地主机发送 SYN,未收到 ACK](https://linux22.com/image/704226/%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%E5%90%91%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%E5%8F%91%E9%80%81%20SYN%EF%BC%8C%E6%9C%AA%E6%94%B6%E5%88%B0%20ACK.png)
我的服务器设置是 nginx 直接连接到 node.js 服务器(nginx 和 node.js 在同一个节点中,并且 nginx 将请求转发到 node.js:127.0.0.1:8000)。症状是有时 nginx 日志中会出现一些 504 日志。并且 node.js 日志没有显示任何收到请求的迹象。然后我使用 iptables 启用了 tcp 日志,它会记录往返于端口 8000 的所有 tcp 数据包。检查 tcp 日志后,似乎 nginx 正在尝试与 node.js 服务器建立 tcp 连接,但从未成功。它只是不断重试发送 SYN 数据包,然后被 nginx 超时。以下是一个例子(tcp + nginx 日志):
May 14 15:27:44 iZ255cnkjm1Z kernel: [5320615.762381] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63441 DF PROTO=TCP SPT=33533 DPT=8000 WINDOW=43690 RES=0x00 SYN URGP=0
May 14 15:27:45 iZ255cnkjm1Z kernel: [5320616.760064] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63442 DF PROTO=TCP SPT=33533 DPT=8000 WINDOW=43690 RES=0x00 SYN URGP=0
May 14 15:27:47 iZ255cnkjm1Z kernel: [5320618.764069] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63443 DF PROTO=TCP SPT=33533 DPT=8000 WINDOW=43690 RES=0x00 SYN URGP=0
May 14 15:27:51 iZ255cnkjm1Z kernel: [5320622.768069] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63444 DF PROTO=TCP SPT=33533 DPT=8000 WINDOW=43690 RES=0x00 SYN URGP=0
May 14 15:27:59 iZ255cnkjm1Z kernel: [5320630.784094] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63445 DF PROTO=TCP SPT=33533 DPT=8000 WINDOW=43690 RES=0x00 SYN URGP=0
May 14 15:28:15 iZ255cnkjm1Z kernel: [5320646.816070] IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63446 DF PROTO=TCP SPT=33533 DPT=8000 WINDOW=43690 RES=0x00 SYN URGP=0
接下来是 nginx 日志:
x.x.x.x - - [14/May/2017:15:28:44 +0800] "GET /javascripts/version.json HTTP/1.1" 504 ...
期间CPU负载较轻,内存<50%,每分钟接入请求少于50个,其他请求均正常处理。
服务器是 Ubuntu 14.04.2 LTS
知道发生了什么吗?似乎是操作系统级别的问题?提前谢谢您。
更新:
防火墙没有任何特殊设置。iptables -nvL 显示以下内容:
Chain INPUT (policy ACCEPT 426K packets, 552M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 350K packets, 218M bytes)
pkts bytes target prot opt in out source destination