Устранение проблем с WebSocket в BigBlueButton
Проблема: Ошибка WebSocket 1002
Симптомы
- После авторизации и создания комнаты появляется ошибка: "Не удалось установить WebSocket соединение (ошибка 1002)"
- HTML5 клиент не может подключиться к серверу
- Аудио/видео не работает
Причины
Ошибка 1002 (Protocol Error) в WebSocket обычно возникает из-за:
1. Неправильной конфигурации Nginx для проксирования WebSocket
2. Отсутствия заголовков Upgrade и Connection
3. Неправильных таймаутов для WebSocket соединений
4. Проблем с SSL/TLS при использовании wss://
Решение
Шаг 1: Проверка конфигурации Nginx
Убедитесь, что в конфигурации Nginx для BigBlueButton присутствуют следующие настройки:
# WebSocket поддержка
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Увеличенные таймауты
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
# Отключение буферизации
proxy_buffering off;
proxy_cache off;
Шаг 2: Использование правильного шаблона конфигурации
Используйте шаблон templates/nginx-bigbluebutton.conf для настройки Nginx:
- Скопируйте шаблон:
sudo cp /home/cdto/DENKART/templates/nginx-bigbluebutton.conf /etc/nginx/sites-available/school.cdto.life
- Отредактируйте файл:
sudo nano /etc/nginx/sites-available/school.cdto.life
- Замените:
school.cdto.lifeна ваш домен (если отличается)10.218.14.37на IP адрес контейнера BBB-CONT22-1-
Пути к SSL сертификатам (если используются)
-
Активируйте конфигурацию:
sudo ln -s /etc/nginx/sites-available/school.cdto.life /etc/nginx/sites-enabled/
- Проверьте конфигурацию:
sudo nginx -t
- Перезагрузите Nginx:
sudo systemctl reload nginx
Шаг 3: Проверка проброса портов LXD
Убедитесь, что порты правильно проброшены из контейнера на хост:
# Проверка проброса портов
lxc config device list BBB-CONT22-1
# Если порты не проброшены, добавьте их:
lxc config device add BBB-CONT22-1 http proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80
lxc config device add BBB-CONT22-1 https proxy listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443
Шаг 4: Проверка логов
Проверьте логи Nginx на наличие ошибок:
# Логи ошибок
sudo tail -f /var/log/nginx/school.cdto.life.error.log
# Логи доступа
sudo tail -f /var/log/nginx/school.cdto.life.access.log
Ищите ошибки, связанные с:
- upstream prematurely closed connection
- upstream timed out
- SSL handshake failed
Шаг 5: Проверка BigBlueButton в контейнере
Проверьте, что BigBlueButton работает внутри контейнера:
# Вход в контейнер
lxc exec BBB-CONT22-1 -- bash
# Проверка статуса сервисов
systemctl status bbb-web
systemctl status bbb-html5
# Проверка логов
journalctl -u bbb-web -n 50
journalctl -u bbb-html5 -n 50
Шаг 6: Проверка сетевого подключения
Проверьте доступность BigBlueButton из контейнера Nginx:
# Из контейнера с Nginx
curl -I http://10.218.14.37
curl -I http://10.218.14.37/html5client
Шаг 7: Проверка SSL/TLS
Если используется HTTPS, убедитесь, что SSL сертификаты корректны:
# Проверка сертификата
sudo certbot certificates
# Проверка SSL соединения
openssl s_client -connect school.cdto.life:443 -servername school.cdto.life
Дополнительные настройки
Увеличение лимитов Nginx
Если проблемы сохраняются, увеличьте лимиты в /etc/nginx/nginx.conf:
http {
# Увеличение буферов
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
# Увеличение таймаутов
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
# Размер тела запроса
client_max_body_size 100M;
}
Проверка файрвола
Убедитесь, что порты открыты:
# Проверка UFW
sudo ufw status
# Если нужно, откройте порты
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 16384:32768/udp
sudo ufw allow 16384:32768/tcp
Диагностика
Тест WebSocket соединения
Используйте браузерную консоль для проверки WebSocket:
// В консоли браузера (F12)
const ws = new WebSocket('wss://school.cdto.life/ws');
ws.onopen = () => console.log('WebSocket connected');
ws.onerror = (error) => console.error('WebSocket error:', error);
ws.onclose = (event) => console.log('WebSocket closed:', event.code, event.reason);
Проверка заголовков
Проверьте заголовки ответа сервера:
curl -I -H "Upgrade: websocket" -H "Connection: Upgrade" https://school.cdto.life/ws
Должны присутствовать:
- Upgrade: websocket
- Connection: upgrade
Полезные ссылки
Контакты и поддержка
Если проблема не решена:
1. Проверьте логи BigBlueButton: /var/log/bigbluebutton/
2. Проверьте логи Nginx: /var/log/nginx/
3. Проверьте документацию BigBlueButton
4. Создайте issue с подробным описанием проблемы