无法在 Amazon EC2 实例上打开端口

无法在 Amazon EC2 实例上打开端口

我有一个 API,已成功托管在 Amazon AMI 实例上。我确信这一点,因为我可以使用 curl 在本地使用它。Api 托管在端口 8080 上。

这就是我在 cmd 中输入的开放端口:

su
iptables -I INPUT -p tcp --dport 8080 -m state --state NEW -j ACCEPT
service iptables save
/etc/init.d/iptables restart

我也关闭了防火墙:

service iptables save
service iptables stop
chkconfig iptables off

这就是我的出/入规则在AWS控制台中的样子: 在此处输入图片描述 在此处输入图片描述

我仍然无法从外部通过服务器公共 IP 访问我的应用程序。为什么会这样?

更新

结果/sbin/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

更新2

netstat -ltpn结果:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      -
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -
tcp        0      0 127.0.0.1:8080              0.0.0.0:*                   LISTEN      3941/uwsgi
tcp        0      0 0.0.0.0:58704               0.0.0.0:*                   LISTEN      -
tcp        0      0 :::45589                    :::*                        LISTEN      -
tcp        0      0 :::22                       :::*                        LISTEN      -
tcp        0      0 :::111                      :::*                        LISTEN      -

答案1

netstat输出来看,您的应用程序似乎只在监听环回接口 -127.0.0.1:8080因此您无法在实例之外连接到它。

例如参见sshservice - 0.0.0.0:22。这意味着服务正在监听“所有网络接口”。

您需要重新配置您的应用程序,使其不仅仅监听环回。

另一个解决方案可能是添加iptables DNAT规则,以便将传入的请求转发到环回接口。

答案2

我将查看与您部署的实例关联的安全组,并确保它允许端口 8080 上的入站流量。网络 ACL 和安全组都需要允许流量。

您可以在这里找到有关安全组的更多信息: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html

相关内容