首页 > 解决方案 > EC2 Nginx 卡在 SYN_ACK 中,用于来自单个 ip 的 http 请求

问题描述

我有一个 EC2 实例启动并运行,默认为 amzn2 linux。我已经从安全组中的所有 ip 启用了 HTTP、HTTPS、SSH 入站规则,因此应该可以从所有 ip 访问它。

我做了

sudo iptables -I INPUT -p tcp --dport 80 -j LOG

我可以看到我的请求出现在

sudo tail -f /var/log/messages

服务器正在运行 nginx,即通过 unix 套接字将请求代理到节点集群。所有请求似乎都来自除我之外的其他 IP 地址。而且只有 HTTP/HTTPS。所以一切似乎都运行良好,但我无法从本地开发机器通过 HTTP/HTTPS 连接,SSH 工作正常。

iptables 是空的

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

我不知道是什么阻止了我的请求。它让我发疯,我花了好几个小时才弄明白,却不知道这是怎么回事。任何人?

更新

似乎 TCP 连接卡在 SYN_RECV 状态。不知道根本原因。

$ netstat -atupen
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 vm.vm.vm.vm:80          my.my.my.my:8857        SYN_RECV    0          0          -

vm.vm.vm.vm -> aws 内部 IP 地址

my.my.my.my -> 我当前的 IP 地址

标签: nginxnetworkingamazon-ec2centosiptables

解决方案


无论如何,您的实例是否在具有一些自定义 ACL 的 VPC 中?

SYN_RECV 表示第一个 SYNC 和 SYN/ACK 正确通过了防火墙,因此您可能想调查为什么您的客户端无法发送最后一个 ACK​​。

您的计算机/路由器上是否有某种防火墙,或者您的网络存在连接问题?

亲切的问候


推荐阅读