Amazon AMIインスタンスで正常にホストされたAPIを持っています。カールを使ってローカルで使用できるので、それは確かです。ポート8080でホストされているAPI。
それは私が開いているポートのために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
UPDATE 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
。これは、サービスが「すべてのネットワークインターフェイス」でリッスンしていることを意味します。
ループバックだけでなくリッスンするようにアプリケーションを再構成する必要があります。
もう1つの解決策は、iptables DNAT
ルールを追加して、着信要求がループバックインターフェイスに転送されるようにすることです。
デプロイしたインスタンスに関連付けられているセキュリティグループを調べて、ポート8080でインバウンドトラフィックが許可されていることを確認します。ネットワークACLとセキュリティグループの両方がトラフィックを許可する必要があります。
セキュリティグループの詳細については、こちらをご覧ください: http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/using-network-security.html