Назад | Перейти на главную страницу

Настройка прокси NGINX для протокола ws: //

Я пытаюсь настроить NGINX для прокси-трафика веб-сокетов. Я запускаю веб-страницу на NGINX (порт 80), которая имеет канал MJPEG с порта 8080, а также принимает трафик веб-сокетов через порт 8090. Я могу проксировать поток MJPEG, но не веб-сокеты. На моей веб-странице javascript на стороне клиента нормально подключался без прокси, используя эту строку:

var conn = new WebSocket ('ws: //192.168.0.14: 8989 / ws');

Чтобы проксировать это, я попытался настроить следующую конфигурацию NGINX:

    #Proxy the Web Socket Traffic
    #----------------------------------------------
    location /sock/ {
        proxy_pass ws://localhost:8989/ws;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    #Proxy the MJPEG Streamer feed
    #----------------------------------------------
    location /mjpeg/ {
            proxy_pass http://localhost:8080/;
    }

А затем изменил javascript на стороне клиента на следующее:

var conn = new WebSocket ('http://192.168.0.14/sock/');

Однако, когда я перезапускаю NGINX, получается:

Не удалось выполнить задание для службы nginx. См. «Systemctl status nginx.service» и «journalctl -xn» для подробностей.

Если я изменю строку прохода прокси на «proxy_pass http: // локальный: 8989 / WS; "тогда служба NGINX успешно перезапускается, но я больше не могу подключаться к веб-сокету.

Есть ли что-то еще, что мне нужно настроить, чтобы NGINX выполнял прокси для адресов ws: //? Является ли http: // эквивалентным, если он обновляет протокол? Если последнее верно, то почему это не работает?

В этом посте я заметил, что они используют ws: // в инструкции передачи прокси. Но у меня это не работает NGINX: как проксировать http (s) трафик на один сервер и ws (s) трафик на другой?

В документации по nginx нет упоминания ws:// схема, доступная для использования в config. Неудивительно, что nginx не запускается, держу пари, что это ошибка конфигурации, на которую он жалуется.

И у тебя определенно есть правильная конфигурация для прокси веб-сокетов. Что касается того, почему это не работает - это еще предстоит определить, это может быть связано с большим набором причин: на самом деле никто не слушает tcp / 8989 или происходит какая-то ошибка приложения в слушателе.