Nginx не проксирует WebSockets

День добрый!

Столкнулся с проблемой. При попытке подключения js-клиента к веб-сокетам сервера произошла вот такая ошибка:

WebSocket connection to 'ws://myipadress/ws/' failed: Error during WebSocket handshake: Unexpected response code: 200

Понял, что нужно обработать это на уровне nginx, погуглил, поменял файл конфигурации в /etc/nginx/conf.d/ вот таким образом:

server {
 
  listen        80;
  listen        [::]:80;
  server_name   versus;
  location /ws/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_pass "http://localhost:5000";
  }
  location / {
   proxy_pass "http://localhost:5000";
  }
  error_page  404  /404.html;
   location = /40x.html{
   }
  error_page  500 502 503 504 /50x.html;
   location = /50x.html{
  } 
}

причем в качестве location для ws пробовал помещать и /ws/ и /ws

и в http{} вот сюда /etc/nginx/nginx.conf добавил это

http {

    ...

    map $http_upgrade $connection_upgrade {
      default upgrade;
     "" close;
     }

    upstream ws {
     server 188.225.73.49:5000;
    }

    ...
}

Добавил заголовки Upgrade, Connection, как доктор прописал. Перезапустил nginx, а не тут-то было...

Проблема с рукопожатием при подключении никуда не делась.

Проверял, когда подключаюсь локально, через ws://localhost:5000/ws, всё подключается и работает прекрасно. То есть проблема именно в том, что nginx у меня не обрабатывает эти запросы.

В итоге попытки подключения в логах на сервере выглядят так:

Request starting HTTP/1.1 GET http://myipadress/ws/ Request finished in 2.3675ms 200

Как мне в итоге заставить nginx проксировать WebSockets?


Ответы (0 шт):