8.8 KiB
Диагностика WebSocket 1006 - Сводка
📚 Созданные документы
1. WEBSOCKET_1006_QUICK_GUIDE.md ⚡ (НАЧНИТЕ ЗДЕСЬ!)
Для: Быстрой диагностики (5 минут) Содержит:
- Экспресс-скрипт для проверки всех компонентов
- Расшифровку результатов
- Быстрые фиксы
- Команды для мониторинга в реальном времени
- Краткий FAQ
2. WEBSOCKET_1006_PRIORITY_CHECK.md
Для: Детальной диагностики с приоритетами Содержит:
- 5 наиболее вероятных причин (с процентами)
- Детальные инструкции для каждой причины
- Решения и обходные пути
- Чек-лист после исправления
3. WEBSOCKET_1006_DIAGNOSTIC_PLAN.md
Для: Полной методологии диагностики Содержит:
- 8 этапов диагностики от простого к сложному
- Все возможные сценарии проблем
- Примеры конфигураций
- Скрипты для мониторинга
- Эталонная конфигурация Nginx
🎯 Быстрый старт
Шаг 1: Экспресс-диагностика (5 минут)
Подключитесь к серверу и выполните:
ssh igor@172.11.0.11
# Скопируйте и выполните весь блок:
echo "=== 1. Статус сервисов ==="
sudo systemctl status nginx eusrr redis --no-pager
echo -e "\n=== 2. JWT/Auth ошибки (САМОЕ ВАЖНОЕ!) ==="
sudo journalctl -u eusrr -n 200 --no-pager | grep -i "websocket\|authentication\|jwt\|token\|4401"
echo -e "\n=== 3. Redis доступен? ==="
redis-cli ping
echo -e "\n=== 4. Ошибки Nginx ==="
sudo tail -20 /var/log/nginx/error.log
echo -e "\n=== 5. Активные WS соединения ==="
sudo netstat -an | grep :9000 | grep ESTABLISHED | wc -l
echo -e "\n=== 6. Тест WS подключения ==="
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" \
-H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: test" \
http://127.0.0.1:9000/ws/ 2>&1 | head -20
Шаг 2: Интерпретация результатов
Результат 2 (JWT/Auth):
- Если видите
Authentication failed,code=4401,Invalid token→ Проблема в JWT! - Переходите к разделу "Проверка JWT" в WEBSOCKET_1006_QUICK_GUIDE.md
Результат 3 (Redis):
- Если НЕ
PONG→ перезапустите Redis:sudo systemctl restart redis
Результат 4 (Nginx errors):
- Если видите
502или504→ проблема с Gunicorn - Если видите
upstream prematurely closed→ проверьте Django логи
Результат 6 (Test):
403- нормально (нет токена)502/504- проблема с backend
Шаг 3: Быстрые фиксы (если нужно)
Фикс 1: Перезапустить всё
sudo systemctl restart redis
sudo systemctl restart eusrr
sudo systemctl reload nginx
Фикс 2: Увеличить время жизни токена JWT
cd /home/igor/EUSRR/backend
nano eusrr_backend/settings.py
# Найдите SIMPLE_JWT и увеличьте ACCESS_TOKEN_LIFETIME
sudo systemctl restart eusrr
Фикс 3: Включить расширенное логирование См. раздел в WEBSOCKET_1006_QUICK_GUIDE.md
📊 Вероятные причины (ваш случай)
Поскольку ваша конфигурация Nginx уже правильная (отдельный блок /ws/, таймауты 7 дней, все заголовки):
1. JWT аутентификация (60% вероятность) 🔥
Проверьте:
- Логи Django на ошибки auth
- Срок действия токенов
- Передается ли токен в URL правильно
Где смотреть:
WEBSOCKET_1006_PRIORITY_CHECK.md→ раздел 1WEBSOCKET_1006_QUICK_GUIDE.md→ "Проверка JWT"
2. CORS/Origin заголовки (25% вероятность)
Проверьте:
- Работает ли с разных доменов (corp.robotail.local vs 172.11.0.11)
- Нужны ли дополнительные CORS заголовки
Где смотреть:
WEBSOCKET_1006_PRIORITY_CHECK.md→ раздел 2
3. Проблемы на стороне клиента (10% вероятность)
Проверьте:
- Firewall/антивирус
- Браузерные расширения
- Режим инкогнито
Где смотреть:
WEBSOCKET_1006_PRIORITY_CHECK.md→ раздел 3WEBSOCKET_1006_QUICK_GUIDE.md→ "Проверка на стороне клиента"
4. Redis/Gunicorn (5% вероятность)
Проверьте:
- Redis доступен и работает
- Gunicorn workers живы
Где смотреть:
WEBSOCKET_1006_PRIORITY_CHECK.md→ разделы 4-5
🛠️ Инструменты для мониторинга
Мониторинг логов Django:
ssh igor@172.11.0.11
sudo journalctl -u eusrr -f | grep -i "websocket\|connect\|4401"
Мониторинг активных соединений:
ssh igor@172.11.0.11
watch -n 2 'sudo netstat -an | grep :9000 | grep ESTABLISHED | wc -l'
Проверка в браузере пользователя:
- F12 → Network → WS
- Найти
/ws/соединение - Проверить Status (должен быть 101)
- Проверить Messages (должны быть ping каждые 20 секунд)
📞 Если ничего не помогло
Соберите полный дамп:
ssh igor@172.11.0.11
cd /tmp
{
echo "=== SERVICES ==="
sudo systemctl status nginx eusrr redis --no-pager
echo -e "\n=== DJANGO LOGS ==="
sudo journalctl -u eusrr --since "1 hour ago" --no-pager
echo -e "\n=== NGINX ERRORS ==="
sudo tail -100 /var/log/nginx/error.log
echo -e "\n=== NGINX CONFIG ==="
sudo cat /etc/nginx/sites-enabled/eusrr
echo -e "\n=== REDIS INFO ==="
redis-cli INFO
} > ws_debug_$(date +%Y%m%d_%H%M%S).txt
ls -lh ws_debug_*.txt
Скачайте файл на локальную машину:
scp igor@172.11.0.11:/tmp/ws_debug_*.txt .
✅ Контрольный список
Перед тем как просить помощь, убедитесь:
- Выполнили экспресс-диагностику из Шага 1
- Проверили JWT логи (это самая частая причина!)
- Redis отвечает
PONG - Нет ошибок в Nginx error.log
- Попробовали в режиме инкогнито
- Проверили на другом устройстве/сети
- Перезапустили сервисы (redis, eusrr, nginx)
- Проверили время жизни JWT токена
📖 Какой документ читать?
У вас 5 минут?
→ WEBSOCKET_1006_QUICK_GUIDE.md ⚡
Нужно разобраться детально?
→ WEBSOCKET_1006_PRIORITY_CHECK.md
Хотите полную методологию?
→ WEBSOCKET_1006_DIAGNOSTIC_PLAN.md
Проблемы с keepalive/ping?
→ WEBSOCKET_KEEPALIVE_FIX.md
🎓 Полезная информация
Код ошибки 1006 означает:
"Abnormal Closure" - соединение закрылось без отправки Close frame.
Это НЕ означает:
- Проблема в коде JavaScript (код правильный)
- Проблема в Nginx конфигурации (конфигурация правильная)
Это ОБЫЧНО означает:
- Проблема с аутентификацией (JWT токен)
- Проблема на уровне сети/firewall
- Backend отклонил соединение
- Таймауты (но у вас 7 дней, маловероятно)
🚀 Следующие шаги
- Начните с экспресс-диагностики (Шаг 1 выше)
- Проверьте JWT логи (это самое важное!)
- Если не помогло - читайте WEBSOCKET_1006_PRIORITY_CHECK.md
- Включите расширенное логирование для детального анализа
- Соберите дамп если ничего не помогло
Удачи в диагностике! 🔍