Локально WebSocket может подключаться без проблем, а на сервере через Nginx сразу падать или зависать. Это типичный признак неправильного проксирования.
Из-за этого не работают чаты, уведомления, статусы заказов, панели мониторинга и все интерфейсы с обновлением в реальном времени.
Коротко: нужно проверить Upgrade-заголовки, proxy_http_version, таймауты, SSL и адрес backend-сервиса.Почему возникает проблема
Nginx по умолчанию не всегда передает WebSocket как нужно. Часто отсутствуют Upgrade и Connection, стоит короткий timeout, перепутан ws/wss или backend слушает другой порт.
Что проверяю в первую очередь
- какой URL использует клиент: ws или wss
- передает ли Nginx Upgrade-заголовки
- какой порт слушает backend
- нет ли короткого proxy_read_timeout
- что видно в access/error логах
Как исправляю
Я проверяю подключение напрямую и через Nginx, затем правлю конфиг прокси и таймауты.
- добавляю proxy_http_version 1.1
- передаю Upgrade и Connection
- настраиваю wss через HTTPS
- увеличиваю таймауты
- проверяю sticky/session логику при масштабировании
Что подготовить перед обращением
- ссылка на сайт или кабинет
- скриншот проблемы
- пример пользователя, заказа или события
- время, когда ошибка повторялась
- доступы или выгрузка логов без лишних персональных данных
Какой результат нужен
WebSocket стабильно подключается через домен, не обрывается сразу и корректно передает события.
Чего лучше не делать
Не открывайте backend-порт наружу как постоянное решение. Лучше правильно настроить reverse proxy.
Вопросы и ответы
Почему локально работает?
Потому что локально нет промежуточного proxy, который может менять протокол.
Нужен ли отдельный location в Nginx?
Часто да, для websocket-пути удобнее задать отдельные настройки.
Что делать за Cloudflare?
Проверить поддержку WebSocket и режим SSL.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот, лог ошибки или пример заказа, и я подскажу, с чего безопасно начать исправление.
Итог
WebSocket через Nginx обычно чинится настройкой Upgrade, HTTP/1.1, таймаутов, wss и правильного backend-порта.