NGINX автоматически обновляет соединения веб-сокетов в обратном прокси-сервере

NGINX автоматически обновляет соединения веб-сокетов в обратном прокси-сервере

У меня есть несколько сервисов, которые я размещаю за обратным прокси NGINX, который был достаточно прост в настройке, но я столкнулся с проблемой с веб-сокетами. Достаточно просто указать одну конечную точку с местоположением, которое включает

   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";

Проблема в том, что есть много конечных точек с веб-сокетами. И мы продолжаем находить новые вещи, которые не работают, потому что есть еще одна конечная точка веб-сокетов, о которой мы не знали.

Есть ли способ установить заголовок Upgradeи только Connectionесли клиент его передает? Если я включу эти две строки для всей службы, она попытается обновитьсякаждыйсоединение, а не только веб-сокеты.

решение1

Только что возникла та же проблема, боролся с операторами if в конфигурации nginx и реализовал следующие директивы:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

Ничего не делайпока неклиент установил Upgradeзаголовок.

Поэтому вместо добавления отдельной Locationдирективы для каждой конечной точки веб-сокета, вы можете просто создать глобальную:

server {
  listen          443 ssl;
  server_name     my-server.example
  location / {
    proxy_pass http://local-service.example/;
    proxy_http_version 1.1;
    proxy_read_timeout 86400s;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

  }
}

Этот прокси-сервер обрабатывает любой HTTP-запрос, а также позволяет веб-сокетам работать для всего пространства имен. Причина, по которой он работает, заключается в том, что $http_upgradeон пуст для не-веб-сокетных запросов.

Связанный контент