Nginx ↔ WebSocket: минимальный reverse-proxy-конфиг с Upgrade/Connection
Конфигурация Nginx, которая корректно проксирует WebSocket (ws/wss). Директива map и нужные заголовки — чтобы избежать 400/502 ошибок.
**Как это работает**
* map превращает пустой $http_upgrade в close, а присутствующий — в upgrade, как требует протокол.
* Заголовки Upgrade и Connection заставляют Nginx переключиться с HTTP на WebSocket.
* Директива proxy_http_version 1.1 обязательна: WebSocket использует апгрейд из HTTP/1.1.
Такой конфиг рекомендован официальной документацией и сообществом ⬆︎
# /etc/nginx/conf.d/websocket.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream ws_backend {
server 127.0.0.1:3000; # ваш WebSocket-сервер
}
server {
listen 443 ssl;
server_name example.com;
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location /ws/ {
proxy_pass http://ws_backend;
proxy_http_version 1.1; # нужен HTTP/1.1
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}
}