Ответ 1
Вы забываете взглянуть на одну часть этой конфигурации nginx:
upstream nodejs {
server 127.0.0.1:8081;
keepalive 256;
}
Эта часть сообщает nginx о создании группы серверов под названием nodejs
, как вы можете прочитать здесь здесь.
8081 - это порт, на котором запущен NodeJS (если вы, например, используете пример приложения).
Вы можете проверить это, посмотрев журналы эластичных бобовых стволов:
-------------------------------------
/var/log/nodejs/nodejs.log
-------------------------------------
Server running at http://127.0.0.1:8081/
Затем, если мы продолжим в файле nginx.conf, мы увидим, что вы уже разместили:
server {
listen 8080;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Это говорит nginx использовать модуль прокси-сервера, чтобы передать все из порта 8080 в нашу восходящую группу nodejs
, которая работает на порту 8081 Это означает, что порт 8081 предназначен для доступа к нему локально, но порт 8080 - это то, что позволяют внешним объектам разговаривать с nginx, который затем передает материал на nodejs.
Некоторые аргументы в пользу того, что NodeJS не подвергаются напрямую, можно найти в fooobar.com/info/11837/....
Порт 8080 используется, потому что это альтернативный порт HTTP, который "обычно используется для веб-прокси и кеширования сервера или для запуска сети сервер как пользователь без полномочий root."
Это объясняет порты. Теперь проблема ELB и то, как все общается друг с другом.
Так как группа безопасности разрешает доступ только к порту 80, существует правило iptables, которое настраивается для перенаправления порта 80 на порт 8080. Это позволяет привязывать к корневому файлу не-root к порту 8080, поскольку для более низких номеров портов требуются привилегии root.
Вы можете проверить это, выполнив следующее:
[[email protected] ~]$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
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
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Итак, когда вы загружаете свой CNAME, балансировщик нагрузки перенаправляет трафик на данный экземпляр на порт 80, который разрешен через группу безопасности, тогда iptables перенаправляет это на порт 8080, который является портом, который nginx использует прокси для передачи трафика на порт 8081, который является локальным портом NodeJS.
Надеюсь, это поможет.