Опасно
TVIP TMS Pro требует наличия и использования действительных SSL сертификатов, как для TMS, так и для видео серверов
Конфигурация фронтенда TVIP TMS
Стандартная поставка tvip-tms-standalone использует nginx в качестве фронтенд сервера.
файл
/etc/nginx/sites-enabled/tvip-tms-bundle.conf- файл виртуального сервера nginx, требует редактирования только для Pro версий и при требовании использовать SSL соединения.файл
/etc/nginx/tvip/tvip-tms-upstreams.conf- конфигурационный файл tvip-tms, редактирование запрещено, будет перезаписан пакетомtvip-tms-standaloneфайл
/etc/nginx/tvip/tvip-tms-locations.conf- конфигурационный файл tvip-tms, редактирование запрещено, будет перезаписан пакетомtvip-tms-standalone
Конфигурация виртуального сервера содержит две директивы include, которые внедряют конфигурацию для использования TVIP TMS, определяя поведение виртуального сервера при обращении на те или иные локации. Вся логика построена на проксировании запросов тем или иным микросервисам.
Опасно
Файлы tvip-tms-upstreams.conf и tvip-tms-locations.conf могут обновляться установщиком, их редактирование может привести к неработоспособности системы.
Ниже описаны конечные точки подключения внешних систем:
Веб интерфейсы
Веб-интерфейс администратора доступен по адресу:
http://tms.example.com/admin, использует приватный Admin API.Веб-интерфейс провайдера доступен по адресу:
http://tms.example.com/provider, использует публичный Provider API.Веб-интерфейс клиентского веб-приложения для ПК доступен по адресу:
https://tms.example.com/web-player/, использует публичный TVIP API, использование без SSL сертификата невозможно.
Публичные API:
Provider API расположено по адресу
http://tms.example.com/api/provider, используется Веб интерфейсом провайдера, предназначен в первую очередь для интеграции с Биллингом оператора услуги.Stat API расположено по адресу
http://tms.example.com/api/stats, может использоваться биллингом, ПО для анализа и прочими инструментами для сбора и анализа статистики.TVIP API доступно по адресу
http://tms.example.com/tvipapi, используется всеми клиентскими устройствами.
Встроенная документация для публичных API:
Документация по Provider API расположена по адресу
http://tms.example.com/provider/swagger-ui.html.Документация по Stat API расположена по адресу
http://tms.example.com/api/stats/swagger-ui/index.html.
Настройка SSL в nginx
Стандартная конфигурация виртуального сервера nginx представлена ниже:
include /etc/nginx/tvip/tvip-tms-upstreams.conf;
log_format log-tms-main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_id" ';
server {
listen 80;
server_name localhost;
# SSL configuration
#
listen 443 ssl default_server;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
error_log /var/log/nginx/tvip-tms.error.log warn;
access_log /var/log/nginx/tvip-tms.access.log log-tms-main;
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;
include /etc/nginx/tvip/tvip-tms-locations.conf;
}
Использование коммерческих сертификатов
Набор сертификатов состоит из корневого сертификата, промежуточного сертификата и сертификата для домена. Если ваш провайдер SSL предоставил файл bundle.crt, вы можете сразу переходить к настройке nginx. В противном случае вам нужно будет объединить в один файл три типа сертификата.
Создание bundle.crt
У вас должно быть три файла: root.crt (корневой сертификат), intermediate.crt (промежуточный сертификат) и your_domain.crt, скопируйте их вместе с файлом .key в произвольный каталог на своем сервере, в котором вы хотите их хранить.
Объединение файлов сертификатов в один crt-файл делается с помощью следующей команды:
cat root.crt intermediate.crt your_domain.crt > bundle.crt
В некоторых случаях Сертификационные центры присылают архив, в котором файлы промежуточного сертификата и корневого сертификата уже объединены в один файл. Если так, то вам нужно будет объединить его с файлом сертификата при помощи следующей команды:
cat bundle.crt your_domain.crt > bundle.crt
После этого вам нужно загрузить сертификаты на сервер и изменить пути в конфигурационном файле nginx.
ssl_certificate /etc/ssl/bundle.crt;
ssl_certificate_key /etc/ssl/your_domain.key
Теперь можно проверить правильность конфигурации nginx командой
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Если все верно, то перезапустите nginx командой:
nginx -s reload
Использование сервиса Let’s encrypt
Установка Certbot
apt install certbot python3-certbot-nginx
Настройка и регистрация в Certbot
certbot register --agree-tos -m name@domain.com
«name@domain.com» - адрес вашей электронной почты
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
Получение сертификата Let’s Encrypt
certbot --nginx -d tms.example.com
«tms.example.com» - адрес вашего домена
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for tms.examle.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/tvip-tms-bundle.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
На вопрос мастера, вводим ответ: 2 ( Redirect)
Проверка:
Проверить, что сервис по обновлению certbot запущен
systemctl status certbot.timer
Использование сервиса ZeroSSL
Для получения сертификата вам потребуется установить утилиту acme.sh
Выполняем команду установки:
curl https://get.acme.sh | sh
Регистрируем аккаунт на ZeroSSL:
acme.sh --issue --nginx -m user@mail.com -d --server zerossl
user@mail.com — ваша почта
Получение сертификата:
acme.sh --issue --nginx -m user@mail.com -d tms.example.com --server zerossl
-----END CERTIFICATE-----
[Thu Mar 16 12:50:32 UTC 2023] Your cert is in: /root/.acme.sh/tms.example.com_ecc/tms.example.com.cer
[Thu Mar 16 12:50:32 UTC 2023] Your cert key is in: /root/.acme.sh/tms.example.com_ecc/tms.example.com.key
[Thu Mar 16 12:50:32 UTC 2023] The intermediate CA cert is in: /root/.acme.sh/vj.test.jettv.org_ecc/ca.cer
[Thu Mar 16 12:50:32 UTC 2023] And the full chain certs is there: /root/.acme.sh/tms.example.com_ecc/fullchain.cer
–nginx — тип веб сервера
tms.example.com — доменное имя для которого получаем сертификат
Скопируйте полученные сертификаты, не используйте файлы сертификатов в папке ~/.acme.sh/, они предназначены только для внутреннего использования, структура папок может измениться в будущем.
acme.sh --install-cert -d tms.example.com --key-file /etc/ssl/tms.example.com.key --fullchain-file /etc/ssl/fullchain.cer --reloadcmd "service nginx force-reload"
[Thu Mar 16 13:37:14 UTC 2023] The domain 'tms.example.com' seems to have a ECC cert already, lets use ecc cert.
[Thu Mar 16 13:37:14 UTC 2023] Installing key to: /etc/ssl/tms.example.com.key
[Thu Mar 16 13:37:14 UTC 2023] Installing full chain to: /etc/ssl/fullchain.cer
[Thu Mar 16 13:37:14 UTC 2023] Run reload cmd: service nginx force-reload
[Thu Mar 16 13:37:14 UTC 2023] Reload success
Пожалуйста, будьте осторожны: команда reloadcmd очень важна. Сертификат может быть автоматически обновлен, но без правильного reloadcmd SSL сертификат не будет обновлен через 60 дней.
После этого укажите пути к сертификатам в настройках nginx:
server_name tms.example.com;
ssl_certificate /etc/ssl/fullchain.cer;
ssl_certificate_key /etc/ssl/tms.example.com.key;
Теперь можно проверить правильность конфигурации nginx командой:
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Если все верно, то перезапустите nginx командой:
nginx -s reload
Теперь ваш сервер TMS доступен по адресу https://tms.example.com.
Дополнительные настройки производительности
При необходимости повышения стабильности и эффективности работы фронтенд-сервера nginx в условиях высокого количества подключений может потребоваться модифицировать параметры, уже заданные в конфигурации и явно задать в ней дополнительные параметры, управляющие тем как nginx использует ресурсы оперционной системы.
Обработка большого количества клиентов требует увеличения максимального количества соединений на один рабочий процесс. За этот параметр в nginx отвечает директива worker_connections, расположенная в блоке events конфигурации /etc/nginx/nginx.conf. Также соответсвующим образом следует увеличить количество файловых дескрипторов, которое может открывать nginx для одного рабочего процесса. За это свойство отвечает параметр worker_rlimit_nofile, который следует прописать в том же файле конфигурации вне блоков. Его рекомендуется выбирать не меньшим, чем полученное из расчёта «значение worker_connections умножненное на 2», например:
# /etc/nginx/nginx.conf
...
worker_rlimit_nofile 32768
events {
worker_connections 16384;
...
}
Предупреждение
Перед увеличением значения параметра worker_rlimit_nofile проверьте максимально допустимое операционной системой количество открытых процессом файловых дескрипторов с помощью команды ulimit -a и убедитесь, что выведенное этой командой значение больше чем то, которое вы собираетесь записать в конфигурации.
Также для повышения производительности в конфигурационном файле /etc/nginx/sites-enabled/tvip-tms-bundle.conf внутри блока server к директиве listen следует добавить атрибут reuseport:
# /etc/nginx/sites-enabled/tvip-tms-bundle.conf
server {
...
listen 443 ssl default_server reuseport;
...
}
Этот атрибут позволяет nginx открывать множество слушающих сокетов на одном адресе и порту - в таком случае для каждого рабочего процесса открывается свой слушающий сокет. Распределением нагрузки между сокетами при этом занимается ядро ОС.
Повысить эффективность работы системы также позволяет активация на nginx кеширования изображений и EPG как наиболее требовательных к сетевым ресурсам единиц контента, предаваемого клиентским устройствам из TMS. Для этого можно создать дополнительный файл конфигурации (например /etc/nginx/tvip/tvip-tms-cached-content-location.conf), в котором прописать специфические расположения кешируемого контента, параметры реверс-прокси nginx для сервисов TMS, отвечающих за этот контент, а также параметры кеширования в следующем виде:
# /etc/nginx/tvip/tvip-tms-cached-content-location.conf:
location /image/png {
proxy_pass http://gateway-tvip-file-api;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Request-Id $request_id;
proxy_pass_request_headers on;
proxy_read_timeout 20s;
proxy_ignore_headers Cache-Control Expires;
proxy_cache ram;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 120m;
}
location /image/jpeg {
proxy_pass http://gateway-tvip-file-api;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Request-Id $request_id;
proxy_pass_request_headers on;
proxy_read_timeout 20s;
proxy_ignore_headers Cache-Control Expires;
proxy_cache ram;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 120m;
}
location /tvipapi/json/short_epg/ {
proxy_set_header X-Request-Id $request_id;
proxy_ignore_headers Cache-Control Expires;
proxy_pass_request_headers on;
proxy_read_timeout 30s;
proxy_cache ram;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 5m;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://gateway-tvip-tms-tvip-api;
proxy_set_header Host $host;
client_max_body_size 500m;
client_body_buffer_size 128k;
}
location /tvipapi/json/epg/ {
proxy_set_header X-Request-Id $request_id;
proxy_pass_request_headers on;
proxy_ignore_headers Cache-Control Expires;
proxy_read_timeout 30s;
proxy_cache ram;
proxy_cache_key $host$uri;
proxy_cache_valid 200 60m;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://gateway-tvip-tms-tvip-api;
proxy_set_header Host $host;
client_max_body_size 500m;
client_body_buffer_size 128k;
}
После этого в файл конфигурации /etc/nginx/sites-enabled/tvip-tms-bundle.conf необходимо добавить общие для всех перечисленных выше эндпоинтов парметры кэша, а также в его внутренний блок server с помощью директивы include включить созданный файл конфигурации:
# /etc/nginx/sites-enabled/tvip-tms-bundle.conf
proxy_cache_path /dev/shm/nginx levels=1:2 keys_zone=ram:20m inactive=120m max_size=1900m;
proxy_cache_min_uses 1;
proxy_cache_lock on;
proxy_cache_lock_timeout 1s;
proxy_temp_path off;
proxy_cache_use_stale timeout http_504 updating http_500 error http_502;
server {
...
include /etc/nginx/tvip/tvip-tms-cached-content-location.conf;
}
Примечание
После внесения вышеописанных изменений требуется перезагрузка nginx с помощью команды sudo systemctl nginx reload или sudo systemctl nginx restart.