Как мне исправить эту ошибку NGINX 502 Bad Gateway?

Я работаю над веб-сокетами в приложении angular. Я подключил его к серверной части Python через nginx. Я обнаружил, что в 90% случаев я получаю 502 ошибки "Плохой шлюз". Я сделаю это:

  1. Загрузите страницу в браузере и подключите веб-сокет
  2. Серверная часть Python отправляет данные в интерфейс angular
  3. Отключить веб-сокет
  4. Попытка повторно подключить веб-сокет <- 502 Ошибка неверного шлюза
  5. Жесткая перезагрузка в Chrome
  6. Загрузите страницу в браузере и подключите веб-сокет <- Нет ошибки 502

Я не могу понять, почему это происходит. Я не могу понять, почему я получаю ошибку 502. Я также не могу понять, почему жесткая перезагрузка решает проблему. Вещи, которые я пробовал:

  • Увеличьте уровень журнала nginx для отладки. Но в журналах нет никакой полезной информации.
  • Я не храню объекты веб-сокетов в состоянии. Я делаю это на случай, если что-то где-то кешируется.
  • Я всегда закрываю веб-сокет с кодом закрытия 1000
  • Я вручную запускаю службу python на сервере, чтобы посмотреть ее. При возникновении ошибки 502 сервис не показывает ничего необычного.
  • Установка nginx max_fails в 0. Установка fail_timeout в 0. Ни одно из этих изменений, похоже, не имеет никакого эффекта. (Я нашел это предложение в других ответах SO)

Что мне нужно искать, чтобы решить эту проблему?

РЕДАКТИРОВАТЬ: Вот мой файл nginx conf.d:

server {
  listen  80;

  index index.html;
  root /var/www/mysite;

  location / {
    access_log  /var/log/nginx/mysite/ui.access.log;
    error_log /var/log/nginx/mysite/ui.error.log;
    try_files $uri $uri/ /index.html;
  }

  location /ws/ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Host $proxy_host;
    proxy_pass http://WEBSOCKET/;
    access_log  /var/log/nginx/mysite/ws_services.access.log;
    error_log /var/log/nginx/mysite/ws_services.error.log;
    proxy_read_timeout 300s;
  }
}

upstream WEBSOCKET {
    ip_hash;
    server 127.0.0.1:8765;
}

0 ответов

Не та же проблема, что и у OP, но на всякий случай кто-нибудь столкнется с этим и имеет ту же настройку, что и я:

Я использовал WebSockets через SSL (поэтому wss://протокол) и выскочил 502, хотя конфигурация работала раньше. Конфиг был такой:

...
proxy_pass http://127.0.0.1:8080;
...

В бэкэнде я использовал узел с ws пакет для создания сервера websocket

Как я уже сказал: он работал раньше, но внезапно перестал работать. Дополнительно nginx написал upstream prematurely closed connection while reading response header from upstreamошибки в журнал ошибок. Я полагаю, что либо nginx, либо node закрыли какую-то проблему с безопасностью, из-за чего установка больше не работает.

Что мне нужно было сделать, чтобы он заработал, так это использовать https вместо http для proxy_pass config

...
proxy_pass https://127.0.0.1:8080;
...
Другие вопросы по тегам