Linux

無法在 Amazon EC2 實例上打開埠

  • March 28, 2017

我有一個成功託管在 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

我也關閉了防火牆:

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      -

netstat輸出來看,您的應用似乎僅在環回介面上偵聽 -127.0.0.1:8080因此您無法在實例之外連接到它。

參見例如ssh服務 - 0.0.0.0:22。這意味著該服務正在偵聽“所有網路介面”。

您需要重新配置您的應用程序以使其不僅在環回上偵聽。

另一種解決方案可能是添加iptables DNAT規則,以便將傳入的請求轉發到環回介面。

我將查看與您部署的實例關聯的安全組,並確保它允許埠 8080 上的入站流量。網路 ACL 和安全組都需要允許流量。

您可以在此處找到有關安全組的更多資訊:http: //docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html

引用自:https://serverfault.com/questions/840833