Нужен Upgrade handshake: заголовки Upgrade и Connection, адекватные таймауты (proxy_read_timeout) и HTTP/1.1 к upstream; иначе соединение «замирает» или рвётся.
Разбор
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
- Долгие idle — поднимайте read/send timeouts.
Итог
WebSocket = Upgrade + Connection + длинные таймауты.