nginx отдаёт 502 bad gateway при проксировании на Node.js приложение
Рейтинг: 75.9% · 26 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
nginx отдаёт 502 bad gateway при проксировании на Node.js приложение
Настраиваю reverse proxy: nginx слушает 443, проксирует на Node.js который крутится на 3000. Сертификат Let's Encrypt, всё выглядит правильно. Но получаю 502 Bad Gateway. В error.log nginx вижу: 'connect() failed (111: Connection refused) while connecting to upstream'. Node.js при этом запущен, curl localhost:3000 отдаёт нормальный ответ. Что не так?
✔ Лучший ответ сформирован автоматически — sonya2611
Вот минимальный рабочий конфиг nginx для такого случая: server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_h…
- proxyquant4000
- Сообщения: 7
- Зарегистрирован: Вс май 17, 2026 4:21 am
Re: nginx отдаёт 502 bad gateway при проксировании на Node.js приложение
Connection refused на 3000 при том что curl работает — почти всегда означает что Node слушает только на 127.0.0.1, а nginx пытается подключиться на другой адрес. Проверь: ss -tlnp | grep 3000 — увидишь на каком адресе реально висит процесс. В конфиге nginx убедись что написано proxy_pass http://127.0.0.1:3000 а не http://localhost:3000 — иногда localhost резолвится в ::1 (IPv6) а нода слушает только IPv4.
Re: nginx отдаёт 502 bad gateway при проксировании на Node.js приложение
Был у меня точно такой же случай. Оказалось что после обновления системы /etc/hosts поменялся и localhost стал резолвиться в IPv6. Лечится либо явным 127.0.0.1 в proxy_pass, либо в настройках Node указать host: '0.0.0.0'. Второй вариант не рекомендую на проде без firewall.
Re: nginx отдаёт 502 bad gateway при проксировании на Node.js приложение
✔ Лучший ответ — сформирован автоматически
Вот минимальный рабочий конфиг nginx для такого случая:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 90;
}
}
Proxy_http_version 1.1 и заголовки Upgrade/Connection нужны если используешь WebSocket. X-Forwarded-Proto важен чтобы приложение знало что запрос пришёл по HTTPS.
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 90;
}
}
Proxy_http_version 1.1 и заголовки Upgrade/Connection нужны если используешь WebSocket. X-Forwarded-Proto важен чтобы приложение знало что запрос пришёл по HTTPS.
- sqlreact9621
- Сообщения: 28
- Зарегистрирован: Вс май 10, 2026 9:45 pm
Поделиться темой:
✈ Telegram
VK
- Похожие темы
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость