我刚刚在安全组后面的全新 AWS 账户上创建了一个 EC2 实例,并在上面加载了一些软件。我在机器上的端口 4567(当前)上运行 Sinatra,并在我的安全组中向全世界开放了该端口。此外,我可以通过 ssh 进入 EC2 实例,但无法连接到端口 4567。我正在使用公共 IP 进行连接:
shakuras:~ tyler$ curl **.***.**.***:22
SSH-2.0-OpenSSH_6.2p2 Ubuntu-6ubuntu0.1
curl: (56) Recv failure: Connection reset by peer
shakuras:~ tyler$ curl **.***.**.***:4567
curl: (7) Failed connect to **.***.**.***:4567; Connection refused
但是我的网络服务器正在运行,因为当我从本地主机 curl 时我可以看到该站点:
ubuntu@ip-172-31-8-160:~$ curl localhost:4567
Hello world! Welcome
我以为它可能是防火墙,但我运行 iptables 并得到:
ubuntu@ip-172-31-8-160:~$ sudo 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
我对这里发生的事情很迷茫。为什么我无法连接到外部世界?
您确定 Web 服务器正在侦听本地主机以外的其他接口吗? 检查输出 网络统计-an | grep 4567
如果它没有在 0.0.0.0 上监听,那就是原因。
您正在根据您的 netstat 命令收听
127.0.0.1
。这就是输出应该是这样的:
tcp 0 0 :::8080 :::* LISTEN
你能发布你的 Sinatra 配置吗?你用什么启动它?
这不适用于简单的 Amazon AMI,安装如http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html所示
Step 1 , 2, 3 works (agent installation and starting demon ) 如图所示
[ec2-user@ip-<ip> ~]$ curl http://localhost:51678/v1/metadata
curl: (7) Failed to connect to localhost port 51678: Connection refused
事实上 netstat 显示了一些侦听的 tcp 端口,但一个能够连接,绝对不是 51678 tcp。
如果您正在使用 Amazon EC2 并确保您在安全组中为 0.0.0.0 设置了自定义 TCP 安全规则,但仍然无法连接;尝试通过
将
0.0.0.0
添加到/etc/hosts的第一行
sudo vim /etc/hosts
//or
sudo nano /etc/hosts
第一行最后一个ip加空格,应该是这样
127.0.0.1 本地主机 0.0.0.0