这是有史以来最古怪的事情。 我将AWS Elastic Beanstalk环境的代理服务器设置configuration为none,而不是nginx或apache,以减less服务器开销,并且因为我不需要caching。
然而,最奇怪的事情发生了。 服务器能够接受端口80上的连接,并将它们转发到在8080上运行的Node.js应用程序,即使没有服务显然在端口80上侦听! 我使用以下命令validation:
sudo lsof -i :80 – 没有输出 sudo iptables -L – 没有转发规则 sudo netstat -an | grep :80 | grep LISTEN sudo netstat -an | grep :80 | grep LISTEN – 没有进程侦听端口80 运行curl http://localhost/在实际的服务器上工作,所以这不是棘手的Elastic Load Balancer转发规则的情况。
AWS如何做到这一点? 他们如何在没有进程监听的情况下转发stream量:80或iptables转发规则?
这是一个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 。