24

これは非常に基本的な Amazon EC2 の質問ですが、私は困惑しているのでここに行きます。

Amazon EC2 インスタンスを起動し、ポート 80 および 8888 でどこからでも HTTP にアクセスできるようにしたいと考えています。これまでのところ、インスタンスが独自の IP アドレスを使用してこれらのポートに接続することさえ許可できません (ただし、localhost には接続されます)。

管理コンソール (および SSH) で標準の HTTP オプションを使用して、HTTP の「デフォルト」セキュリティ グループを構成しました。

デフォルトのセキュリティ グループでインスタンスを起動しました。

SSH ポート 22 でインスタンスに 2 回接続し、1 つのウィンドウでポート 80 で HTTP サーバーを起動します。もう 1 つのウィンドウで、「localhost」を使用して HTTP に接続できることを確認します。

ただし、パブリック DNS またはプライベート IP アドレスを使用してインスタンス (または他の場所) から HTTP にアクセスしようとすると、「接続が拒否されました」と表示されます。

私は何を間違っていますか?

以下は、成功した wget とインスタンス自体から実行された 2 つの失敗を示すコンソール フラグメントです。

--2012-03-07 15:43:31--  http://localhost/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: /__whiff_directory_listing__ [following]
--2012-03-07 15:43:31--  http://localhost/__whiff_directory_listing__
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: “__whiff_directory_listing__”

[ <=>
                                                                                                               ] 7,512       --.-K/s   in 0.03s   

2012-03-07 15:43:31 (263 KB/s) - “__whiff_directory_listing__” saved [7512]

[ec2-user@ip-10-195-205-30 tmp]$ wget http://ec2-50-17-2-174.compute-1.amazonaws.com/
--2012-03-07 15:44:17--  http://ec2-50-17-2-174.compute-1.amazonaws.com/
Resolving ec2-50-17-2-174.compute-1.amazonaws.com... 10.195.205.30
Connecting to ec2-50-17-2-174.compute-1.amazonaws.com|10.195.205.30|:80... failed:          
Connection refused.
[ec2-user@ip-10-195-205-30 tmp]$ wget http://10.195.205.30/
--2012-03-07 15:46:08--  http://10.195.205.30/
Connecting to 10.195.205.30:80... failed: Connection refused.
[ec2-user@ip-10-195-205-30 tmp]$ 
4

6 に答える 6

22

標準のtcpソケットインターフェイスでは、送信またはリッスンするときに特定のIPアドレスにバインドする必要があります。やや特別なアドレスがいくつかあります。ローカルホスト(おそらくおなじみです)は127.0.0.1です。特別なアドレス0.0.0.0またはINADDR_ANY(インターネットプロトコル、ANY ADDRESSの特別な省略形)もあります。これは、ホスト上の任意のアドレス、より一般的にはすべてのアドレスをリッスンする方法です。これは、特定のIPアドレスに関心がないことをカーネル/スタックに通知する方法です。

したがって、「localhost」をリッスンするサーバーをセットアップする場合、このホストのユーザーのみが到達できる特別な予約済みアドレスを使用することをサービスに通知します。このアドレスはすべてのホストに存在しますが、ローカルホストに接続すると、リクエスト元のホストにのみ到達します。

どこでも(ローカルホスト、すべてのインターフェイスなどで)サービスに到達できるようにする場合は、0.0.0.0を指定できます。

于 2012-03-07T17:53:40.827 に答える
22

(0) ばかげていますが、最初に行う必要があるのは、Web サーバーが実行されていることを確認することです。

(1) セキュリティ グループを編集して、着信 HTTP パケットが Web サイトにアクセスできるようにする必要があります。Web サイトがポート 80 でリッスンしている場合は、セキュリティ グループを編集して、前述のようにポート 80 へのアクセスを開く必要があります。Web サイトが他のポートでリッスンしている場合は、セキュリティ グループを編集してそのポートにアクセスする必要があります。

(2) Linux インスタンスを実行している場合、iptablesファイアウォールがデフォルトで実行されている可能性があります。実行して、このファイアウォールがアクティブであることを確認できます

sudo サービスの iptables ステータス

コマンドラインで。出力が得られれば、iptables ファイアウォールが実行されています。「ファイアウォールが実行されていません」というメッセージが表示された場合、それは一目瞭然です。通常、iptablesファイアウォールはデフォルトで実行されています。

2 つのオプションがあります。ファイアウォールをノックアウトするか、ファイアウォールの構成を編集して HTTP トラフィックを通過させることです。私は、より単純なオプションとしてファイアウォールをノックアウトすることにしました (私にとって)。

sudo サービス iptables 停止

iptablesがアクティブな場合、セキュリティ グループを使用して構成ファイルを生成する Amazon のファイアウォールの機能を複製するだけなので、 iptablesをシャットダウンしても実際のセキュリティ リスクはありません。ここでは、Amazon AWS がファイアウォールの設定を誤っていないと仮定しています。これは非常に安全な仮定です。

(3) これで、ブラウザから URL にアクセスできるようになりました。

(4) Microsoft Windows Server もデフォルトでパーソナル ファイアウォールを実行するため、Windows Server のパーソナル ファイアウォールも修正する必要があります。

訂正: AWS のデフォルトでは、新しい EC2 インスタンスの作成を注文するときに、AWS は iptables (Centos) や UAF (Ubuntu) などのサーバー ファイアウォールを起動しません。これが、同じ VPC にある EC2 インスタンスが互いに SSH で接続できる理由です。同じ VPC 内の別の EC2 インスタンスから起動した Web サーバーを「見る」ことができます。

RESTful API がすべてのインターフェイス、つまり 0.0.0.0:portID でリッスンしていることを確認してください。

于 2013-09-17T03:04:02.490 に答える
5

接続が拒否されているので(パケットが拒否されています) 、 iptablesが問題を引き起こしているに違いありません。実行してみてください

iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT

接続をテストします。

また、これらのルールを永続的に追加する必要があります。これは、上記の行を ie. Red Hat を実行している場合は、/etc/sysconfig/iptables。

于 2013-11-26T23:31:11.877 に答える
4

どうやら私は "localhost にバインド" していましたが、すべての着信 TCP インターフェイス (?) のポート 80 に応答するには 0.0.0.0 にバインドする必要がありました。これは TCP/IP の微妙な点で、まだ完全には理解できていませんが、問題は解決しました。

于 2012-03-07T17:40:36.563 に答える
0

次のことをしなければなりませんでした:

1)インスタンス構成でHTTPアクセスを有効にします。デフォルトではSSHのみではありませんでした2)nodejsサーバーを実行しようとしたため、ポートは80にバインドされていました-> 3000は、次のコマンドを実行して修正しました

iptables -F
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo service iptables-persistent flush
于 2016-08-20T00:35:40.350 に答える