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

neu*_*t47 1 networking linux centos amazon-ec2 amazon-web-services

我有一个成功托管在 Amazon AMI 实例上的 API。我知道这是肯定的,因为我可以使用 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
Run Code Online (Sandbox Code Playgroud)

我也关闭了防火墙:

service iptables save
service iptables stop
chkconfig iptables off
Run Code Online (Sandbox Code Playgroud)

这就是我的出/入规则在 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
Run Code Online (Sandbox Code Playgroud)

更新 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      -
Run Code Online (Sandbox Code Playgroud)

dsm*_*k80 11

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

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

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

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