在没有 nginx/apache 的情况下,Elastic Beanstalk 如何在端口 80 上将流量转发到端口 8080 上的我的应用程序?

在没有 nginx/apache 的情况下,Elastic Beanstalk 如何在端口 80 上将流量转发到端口 8080 上的我的应用程序?

这是最奇怪的事情。我已将 AWS Elastic Beanstalk 环境的代理服务器设置配置为没有任何而不是 nginx 或 apache,以减少服务器开销,而且因为我不需要缓存。

然而,最奇怪的事情发生了。服务器能够接受端口 80 上的连接并将其转发到我在 8080 上运行的 Node.js 应用程序,即使没有服务在端口 80 上监听!我使用以下命令进行了验证:

  • sudo lsof -i :80- 无输出
  • sudo iptables -L- 没有前向规则
  • sudo netstat -an | grep :80 | grep LISTEN- 没有进程监听端口 80

在实际服务器上运行有效curl http://localhost/,因此这不是棘手的弹性负载均衡器转发规则的情况。

AWS 是如何做到的?它们如何在没有进程监听:80或 iptables 转发规则的情况下转发流量?

答案1

这是一条 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

相关内容