web-dev-qa-db-ja.com

Elastic Beanstalkは、ポート80のトラフィックをnginx / apacheなしでポート8080のアプリにどのように転送しますか?

これはこれまでで最も奇妙なことです。 AWS Elastic Beanstalk環境のプロキシサーバー設定をnginxまたはApacheではなくnoneに構成して、サーバーのオーバーヘッドを削減しました。キャッシュは必要ありません。

しかし、最も奇妙なことが起こりました。サーバーはポート80で接続を受け入れ、ポート80でリッスンしているサービスがない場合でも、8080で実行されているNode.jsアプリに転送できます。次のコマンドで確認しました。

  • Sudo lsof -i :80-出力なし
  • Sudo iptables -L-転送ルールなし
  • Sudo netstat -an | grep :80 | grep LISTEN-ポート80でリッスンしているプロセスはありません

実際のサーバーでcurl http://localhost/を実行すると機能するため、これはトリッキーなElastic LoadBalancer転送ルールの場合ではありません。

AWSはどのようにそれを行いますか?プロセスが:80またはiptables転送ルールをリッスンせずにトラフィックを転送するにはどうすればよいですか?

3
Elad Nava

これはNATルールです。

iptables -L -t nat

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination    

おかげで redditの@slims_s

8
Elad Nava