我的服务器设置是 nginx 直接连接到 node.js 服务器(nginx 和 node.js 在同一个 Node 中,nginx 将请求转发到 Node :127.0.0.1:8000)。症状是有时nginx日志中有一些504日志。并且 node.js 日志没有显示任何收到请求的迹象。 然后我使用 iptables 启用了 tcp 日志,它将所有 tcp 数据包记录到端口 8000。检查 tcp 日志后,nginx 似乎试图与 node.js 服务器建立 tcp 连接,但它从未成功。它一直在重试发送 SYN 数据包,然后被 nginx 超时。这是一个示例(tcp + nginx 日志):
13:44:44 sp:48103 dp:8000 SYN
13:44:45 sp:48103 dp:8000 SYN
13:44:47 sp:48103 dp:8000 SYN
13:44:51 sp:48103 dp:8000 SYN
13:44:59 sp:48103 dp:8000 SYN
13:45:15 sp:48103 dp:8000 SYN
13:45:44 nginx 504
期间CPU负载很轻,内存<50%,每分钟传入请求不到50个。其他请求均正常处理。
服务器是 Ubuntu 14.04.2 LTS
知道发生了什么事吗?似乎是操作系统级别的问题?提前谢谢你。
最佳答案
检查环回接口(interface)上的 TCP 端口 8000 上是否确实正在运行某些东西。尝试一些命令,例如:
lsof -P -n -i tcp:8000
fuser 8000/tcp
ss -4lnt
netstat -4lnt
这些应该会给你一些提示,让你知道是否有东西在听。或者它可能只在特定接口(interface)/地址上监听而不是您的环回。
关于node.js - nginx tcp SYN 数据包未收到 ACK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43950558/