我刚刚在一个安全组后面的全新AWS账户上创建了一个EC2实例,并在其上加载了一些软件。我在端口4567(当前)上运行Sinatra,并在我的安全组中将该端口打开到全世界。此外,我能够进入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
但是我的网络服务器正在运行,因为当我从localhost卷起时我可以看到该网站:
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
我对这里发生的事情感到十分迷茫。为什么我不能与外界联系?
答案 0 :(得分:2)
您确定Web服务器正在侦听除localhost之外的其他接口吗? 检查输出 netstat -an | grep 4567
如果它没有在0.0.0.0上收听,那就是原因。
答案 1 :(得分:2)
您正在根据您的netstat命令监听127.0.0.1
。这就是输出应该是这样的:
tcp 0 0 :::8080 :::* LISTEN
你能发布你的Sinatra配置吗?你用什么来开始呢?
答案 2 :(得分:2)
答案 3 :(得分:0)
这不适用于简单的Amazon AMI,安装如http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-install.html
所示步骤1,2,3工作(代理安装和启动恶魔)如图所示
[ec2-user@ip-<ip> ~]$ curl http://localhost:51678/v1/metadata
curl: (7) Failed to connect to localhost port 51678: Connection refused
infact netstat显示了一些监听tcp端口,但是一个能够连接,绝对不是51678 tcp。