Обратный прокси
В конфигурации с HTTPS прокси принимает запросы на порту 443 и передаёт их локальным сервисам. Сертификаты хранятся на нём; TolkTak и LiveKit слушают 127.0.0.1. В установке через Compose так уже настроен Caddy; эта страница — для своего прокси.
Путь на chat.example.com |
Локальный адрес |
|---|---|
/rtc и всё внутри |
http://127.0.0.1:7880 (LiveKit) |
| всё остальное | http://127.0.0.1:8080 (TolkTak) |
Это пример с портами по умолчанию. Сами звонки идут к LiveKit через отдельные порты, а не через прокси. Другие пути LiveKit, например /twirp, наружу не передавайте: это его служебный API.
Сервер должен знать, что работает за прокси: задайте TOLKTAK_TRUST_PROXY=1. Тогда приложение получит адрес LiveKit wss://chat.example.com, а лимиты запросов будут брать адрес участника из X-Forwarded-For. В установке через Compose этот параметр уже задан.
nginx
Тот же файл находится в репозитории: deploy/nginx.conf.example. Он содержит оба пути, настройки WebSocket и лимиты тела запроса, а также закрывает вебхук.
- Добавить содержимое примера в конфигурацию nginx, например в
/etc/nginx/conf.d/tolktak.conf. - Заменить домен, локальные порты и пути к сертификатам.
- Проверить конфигурацию и применить её:
sudo nginx -t && sudo systemctl reload nginx
Команда systemctl подходит для системы с systemd. Пример использует http2 on из nginx 1.25.1 и новее; в более ранних версиях эту строку можно убрать.
Основные параметры
| Параметр | Назначение |
|---|---|
Upgrade, Connection |
Передача WebSocket для событий чата и подключения к звонкам. |
client_max_body_size |
Лимит тела запроса: 60m для загрузок в /api/v1/files при лимите файла TolkTak в 50 МБ, 1m для остального. |
proxy_read_timeout |
Ожидание данных от сервиса: 120 секунд для TolkTak и 3600 для LiveKit в примере. |
X-Forwarded-For |
Адрес участника для ограничения частоты запросов. TolkTak читает последний адрес в заголовке, поэтому прокси должен задавать его или дописывать в конец. В примере это адрес, который видит nginx. |
X-Forwarded-Proto |
https: по нему сервер отдаёт приложению адрес LiveKit с wss://. |
Strict-Transport-Security |
Браузеры открывают домен только по HTTPS. |
/api/v1/livekit/webhook |
Закрыт снаружи: LiveKit обращается к нему по локальному адресу. Если LiveKit работает в другом месте, например в LiveKit Cloud, уберите этот блок. |
При изменении TOLKTAK_MAX_UPLOAD_MB лимит nginx должен оставаться выше с учётом служебных данных запроса. Превышение лимита возвращает HTTP 413. Передача WebSocket описана в документации nginx.
Caddy
chat.example.com {
header Strict-Transport-Security max-age=31536000
reverse_proxy /rtc* 127.0.0.1:7880
reverse_proxy 127.0.0.1:8080
}
Caddy сам получает сертификат и без дополнительных настроек передаёт WebSocket и заголовки X-Forwarded-*.
Проверка
curl https://chat.example.com/healthz
curl https://chat.example.com/api/v1/server
Вместо примера нужен свой домен. Ответ ok на первую команду подтверждает доступ к TolkTak через HTTPS. Во второй livekit_url должен быть wss://chat.example.com; ws://...:7880 означает, что сервер не видит заголовков прокси. Звонок и трансляция проверяются отдельно с двух аккаунтов, желательно из разных сетей.
Для другого прокси сохраняются те же маршруты, поддержка WebSocket и лимит загрузки файлов. При проблемах — диагностика подключения.