我有一个 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
我仍然无法从外部通过服务器公共 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
因此您无法在实例之外连接到它。
例如参见ssh
service - 0.0.0.0:22
。这意味着服务正在监听“所有网络接口”。
您需要重新配置您的应用程序,使其不仅仅监听环回。
另一个解决方案可能是添加iptables DNAT
规则,以便将传入的请求转发到环回接口。
答案2
我将查看与您部署的实例关联的安全组,并确保它允许端口 8080 上的入站流量。网络 ACL 和安全组都需要允许流量。
您可以在这里找到有关安全组的更多信息: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html