@MrPofix

Почему Nginx не меняет протокол на WebSocket?

Мой конфиг хоста:
location /socket.io {
    proxy_pass http://127.0.0.1:6002/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
}


Проверяю заголовки, которыми обменивается прокси, с помощью Socat:
socat -v TCP-LISTEN:6002,fork TCP:127.0.0.1:6001
Т.е. слушает 6002, перехватывает заголовки и отправляет запрос дальше на порт 6001.

На DEV сервере у меня все ок, протокол меняется (HTTP/1.1 101 Switching Protocols):
2020/10/22 13:51:36.147102  length=175 from=0 to=174
HTTP/1.1 101 Switching Protocols\r
Upgrade: websocket\r
Connection: Upgrade\r
Sec-WebSocket-Accept: yU0AKhFOQaw5j9cQS8oq2bjx1pw=\r
Sec-WebSocket-Extensions: permessage-deflate\r


Но на продакшне протокол НЕ меняется, передается обычный GET (GET /socket.io HTTP/1.1):
2020/10/22 13:50:34.161919  length=588 from=0 to=587
GET /socket.io HTTP/1.1\r
Upgrade: websocket\r
Connection: Upgrade\r
Host: localhost:6002\r
Pragma: no-cache\r
Cache-Control: no-cache\r
Authorization: Basic YWlkYXI6MTIzMTIz\r
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36\r
Origin: chrome-extension://pfdhoblngboilpfeibdedpjgfnlcodoo\r
Sec-WebSocket-Version: 13\r
Accept-Encoding: gzip, deflate\r
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r
Sec-WebSocket-Key: rq5CaFXEzZ/vWSnOJ5H3PA==\r
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r


Пробовал обновить Nginx до 1.19.1, ситуация не изменилась.
Единственное отличие, то на DEV сервере Ubuntu 18, а на проде Ubuntu 16.

Помогите, пожалуйста. Где я не прав?
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
@MrPofix Автор вопроса
Не знаю, в чем проблема, но я нашел решение.
Я много чего обновил: Nginx до 1.19.1, возможно, установил дополнительные модули. Установил npm не глобально, а локально.
И в какой-то момент оно начало работать как нужно. До сих пор не понимаю в чем дело)

Внимание: это работает, только если вы напишете location /socket.io.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы