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?