Сейчас я собираюсь развернуть свое приложение node.js на Google Compute Engine через nginx, но после того, как все настройки будут выполнены, я столкнулся с ошибкой «502 Bad Gateway».
Затем, после стольких часов раскопок, я наконец обнаружил, что proxy_pass
поле в /etc/nginx/sites-available/server.conf
должен быть ваш реальный внутренний IP-адрес, отображаемый в консоли GCE, а не http://127.0.0.1
. Ниже представлен файл conf (некоторые значения приведены только для иллюстрации):
server {
listen 80;
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://10.102.24.152:8888;
}
}
Однако во всех обучающих материалах, которым я следовал, установлено значение proxy_pass
к http://127.0.0.1
. Но в моем случае это совсем не сработало. Ниже приведены примеры руководств:
Так что теперь я задаюсь вопросом, правильный ли это способ заставить сервер работать. Или это ведет к чему-то ценному с точки зрения безопасности? Или, может быть 127.0.0.1
правильная цифра и на моей стороне есть другие проблемы?
Да, ввод IP-адреса экземпляра - это разумный поступок.
Вы должны быть осторожны, чтобы не использовать общедоступный IP-адрес, так как вы можете получить дополнительную плату за пропускную способность. Я не знаком с GCE, но в AWS у вас есть внешний IP-адрес, который маршрутизируется в Интернете, и внутренний IP-адрес в вашей сети. Здесь могут быть отличия между AWS и GCE, может меня кто-нибудь поправит.