这是最奇怪的事情。我已将 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