Linux
無法在 Amazon EC2 實例上打開埠
我有一個成功託管在 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
而且我仍然無法從外部通過伺服器公共 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