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

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

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

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

    #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.service. Подробнее см. 'Systemctl status nginx.service' и 'journalctl -xn'

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

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

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

2
задан 13 April 2017 в 15:14
1 ответ

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

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

2
ответ дан 3 December 2019 в 11:31

Теги

Похожие вопросы