Corp/WEBSOCKET_1006_SUMMARY.md

255 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Диагностика 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 минут)
Подключитесь к серверу и выполните:
```bash
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: Перезапустить всё**
```bash
sudo systemctl restart redis
sudo systemctl restart eusrr
sudo systemctl reload nginx
```
**Фикс 2: Увеличить время жизни токена JWT**
```bash
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` → раздел 1
- `WEBSOCKET_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` → раздел 3
- `WEBSOCKET_1006_QUICK_GUIDE.md` → "Проверка на стороне клиента"
### 4. Redis/Gunicorn (5% вероятность)
**Проверьте:**
- Redis доступен и работает
- Gunicorn workers живы
**Где смотреть:**
- `WEBSOCKET_1006_PRIORITY_CHECK.md` → разделы 4-5
---
## 🛠️ Инструменты для мониторинга
### Мониторинг логов Django:
```bash
ssh igor@172.11.0.11
sudo journalctl -u eusrr -f | grep -i "websocket\|connect\|4401"
```
### Мониторинг активных соединений:
```bash
ssh igor@172.11.0.11
watch -n 2 'sudo netstat -an | grep :9000 | grep ESTABLISHED | wc -l'
```
### Проверка в браузере пользователя:
1. F12 → Network → WS
2. Найти `/ws/` соединение
3. Проверить Status (должен быть 101)
4. Проверить Messages (должны быть ping каждые 20 секунд)
---
## 📞 Если ничего не помогло
### Соберите полный дамп:
```bash
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
```
Скачайте файл на локальную машину:
```bash
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. **Начните с экспресс-диагностики** (Шаг 1 выше)
2. **Проверьте JWT логи** (это самое важное!)
3. **Если не помогло** - читайте WEBSOCKET_1006_PRIORITY_CHECK.md
4. **Включите расширенное логирование** для детального анализа
5. **Соберите дамп** если ничего не помогло
Удачи в диагностике! 🔍