Сначала отличите неудачное рукопожатие от соединения, которое открывается и затем закрывается. Эти симптомы ведут к разным проверкам.
Дайте приложению получить запрос обновления протокола
Для отдельного WebSocket-маршрута поместите это в server:
location /socket/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
явно использует HTTP/1.1 к бэкенду. передаёт запрошенную клиентом смену протокола. сообщает бэкенду, что соединение запрашивает эту смену. Заголовки нужно пересылать явно: прокси не передают автоматически каждый заголовок, специфичный для соединения.
