// DevOps

Jitsi Meet (Docker) за Nginx Reverse Proxy

Опубликовано 05.11.2025

Как установить Jitsi Meet (Docker) за Nginx Reverse Proxy

В предыдущей статье мы развернули базовый сервер Jitsi Meet с помощью Docker.
Это отличный способ быстро запустить видеоконференции, но в продакшне сервер Jitsi часто должен работать на том же хосте, где уже запущены другие веб-приложения.
Чтобы всё жило мирно, нужно спрятать Jitsi за Nginx reverse proxy.
Nginx возьмёт на себя SSL, порты 80/443 и будет проксировать запросы к контейнерам Jitsi, работающим на внутренних портах.


Архитектура

Целевая схема выглядит так:

  1. Пользовательhttps://meet.your-domain.comNginx (порт 443)
  2. Nginxhttp://192.168.1.131:8400Jitsi Web Container (веб-интерфейс и WebSocket)
  3. Пользователь → (порт 10000/UDP) → Jitsi JVB Container (видео/аудио поток)

Важно: Nginx проксирует только веб-трафик.
Медиа (видео и звук по WebRTC) идёт напрямую на Jitsi Videobridge по порту 10000/UDP.


Шаг 1. Настройка Jitsi Meet (.env)

Перед настройкой прокси нужно сообщить Jitsi, что теперь HTTPS и сертификаты обрабатываются внешним Nginx.

Откройте .env и установите:

DISABLE_HTTPS=1
HTTP_PORT=8400
HTTPS_PORT=8443
ENABLE_LETSENCRYPT=0
PUBLIC_URL=https://meet.your-domain.com/

Теперь перезапустите Jitsi:

cd /path/to/docker-jitsi-meet
docker compose down
docker compose up -d

Проверьте, что контейнер web слушает порт 8400:

docker ps | grep web

Шаг 2. Настройка Nginx Reverse Proxy

Создайте конфигурацию:

sudo nano /etc/nginx/sites-available/meet.your-domain.com.conf

Добавьте:

upstream jitsi {
    server 192.168.1.131:8400;
}

server {
    listen 80;
    server_name meet.your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name meet.your-domain.com;

    ssl_certificate /etc/letsencrypt/live/meet.your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/meet.your-domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    client_max_body_size 0;
    proxy_buffers 8 32k;
    proxy_buffer_size 64k;

    location / {
        proxy_pass http://jitsi;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_read_timeout 300s;
    }

    location /xmpp-websocket {
        proxy_pass http://jitsi;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400s;
    }

    location ~ ^/colibri-ws/ {
        proxy_pass http://jitsi;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400s;
    }

    location /http-bind {
        proxy_pass http://jitsi;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 60s;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2?|ttf|svg|eot)$ {
        proxy_pass http://jitsi;
        proxy_cache off;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

Активируйте конфиг:

sudo ln -s /etc/nginx/sites-available/meet.your-domain.com.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Шаг 3. Настройка Firewall

Медиа-трафик Jitsi проходит по UDP, поэтому порт 10000 должен быть доступен напрямую.

Пример проброса портов

External: 10000/UDP → Internal: 192.168.1.131:10000/UDP

Для UFW

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw reload

Если этот порт не открыт — участники конференции не смогут подключиться к видео и звуку.


Шаг 4. Проверка авторизации (если включена)

Если в .env включено:

ENABLE_AUTH=1
AUTH_TYPE=internal

Создайте пользователей:

docker compose exec prosody prosodyctl register user1 meet.jitsi StrongPassword

Авторизация будет работать без изменений, так как Nginx просто проксирует XMPP-трафик.


Итог

Теперь ваш Jitsi Meet работает за Nginx reverse proxy:

  1. Jitsi (.env) знает, что HTTPS отключен и слушает порт 8400.
  2. Nginx (.conf) обслуживает 443, проксирует /, /xmpp-websocket, /colibri-ws и /http-bind.
  3. Firewall пробрасывает 10000/UDP напрямую на JVB.

Можно размещать Jitsi рядом с другими сайтами и сервисами, а Nginx становится единым шлюзом в интернет.

// Reviews

Отзывы по теме

Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.

Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.

mendarinno384

Jitsi meet: персональный zoom, настройка jitsi meet в docker и на VPS

11.11.2025 · ★ 5/5

Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!

Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!

christ_media

N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram

24.09.2025 · ★ 5/5

Опытный покупатель

ladohinpy

N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram

25.08.2025 · ★ 5/5

Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.

Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.

NadoBy

NadoBy

N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram

12.08.2025 · ★ 5/5

Освоившийся покупатель

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему