Это самая странная вещь на свете. Я настроил прокси-сервер в среде AWS Elastic Beanstalk на никто вместо nginx или apache, чтобы уменьшить накладные расходы на сервер, и поскольку мне не нужно кеширование.
Однако произошло самое странное. Сервер может принимать соединения через порт 80 и перенаправлять их в мое приложение Node.js, работающее на 8080, хотя, по-видимому, никакая служба не прослушивает порт 80! Я проверил с помощью следующих команд:
sudo lsof -i :80
- нет выходаsudo iptables -L
- нет форвардных правилsudo netstat -an | grep :80 | grep LISTEN
- нет процессов, прослушивающих порт 80Бег curl http://localhost/
на реальном сервере работает, так что это не случай сложных правил пересылки Elastic Load Balancer.
Как это делает AWS? Как они пересылают трафик без прослушивания процесса :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
Благодаря @slims_s из Reddit.