Как настроить стриминг видео большого размера в Nginx?
Добрый день!
Есть сайт на котором должно воспроизводиться видео
C Видео которые весят мало все нормально работает
Но когда я пытаюсь запустить видео большого размера около 2GB при запросе вылазит ошибка 502
При запуске проекта локально все работает
Проект написан на Django
Request Headers:
GET /stream/1/ HTTP/1.1 Accept: */* Accept-Encoding: identity;q=1, *;q=0 Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,tt;q=0.6,ro;q=0.5 Connection: keep-alive Cookie: csrftoken=plWGGaJUIsuU45DK6xiPnqzyX0qBrC5o; sessionid=gcoccsqsp7mej0mk5d8wizmhgd9jba7o Host: example.ru Range: bytes=0- Referer: https://example.ru/film/jau-2024/ Sec-Fetch-Dest: video Sec-Fetch-Mode: no-cors Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "macOS" |
GET /stream/1/ HTTP/1.1 Accept: */* Accept-Encoding: identity;q=1, *;q=0 Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,tt;q=0.6,ro;q=0.5 Connection: keep-alive Cookie: csrftoken=plWGGaJUIsuU45DK6xiPnqzyX0qBrC5o; sessionid=gcoccsqsp7mej0mk5d8wizmhgd9jba7o Host: example.ru Range: bytes=0- Referer: https://example.ru/film/jau-2024/ Sec-Fetch-Dest: video Sec-Fetch-Mode: no-cors Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "macOS"
Response Headers:
HTTP/1.1 502 Bad Gateway Server: nginx/1.18.0 (Ubuntu) Date: Tue, 19 Mar 2024 08:07:01 GMT Content-Type: text/html Content-Length: 568 Connection: keep-alive |
HTTP/1.1 502 Bad Gateway Server: nginx/1.18.0 (Ubuntu) Date: Tue, 19 Mar 2024 08:07:01 GMT Content-Type: text/html Content-Length: 568 Connection: keep-alive
Содержимое nginx.conf:
user root; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; types_hash_max_size 2048; client_max_body_size 3G; client_body_buffer_size 128k; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs "nginx.conf" 85L, 1500B 20,1-8 Наверху |
user root; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; types_hash_max_size 2048; client_max_body_size 3G; client_body_buffer_size 128k; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs "nginx.conf" 85L, 1500B 20,1-8 Наверху
Дополнительно:
php не используется случайно?
отдавать клиенту. Но тут облом. Стриминг это обычно не файл. И у стриминга трудно посчитать конец.
Бесконечный он. Вот такие дела.
видео-хостинг. И давать ссылки.
Ответы:
Попробуйте увеличить размер ответа от сервера в конфиге nginx max_response_body_size = ...
Неплохо было конечно запостить конфиг nginx полностью (так как самое интересное как раз пропущено)
Попробую предположить: вы используется python для авторизации доступа к видео и после авторизации выдаете файл средствами python?
Если так, то есть несколько более гуманных способов:
- использовать в скрипте отдачи видео HTTP заголовок X-Accel-Redirect вместо отдачи самим скриптом (емнип у Джанго даже есть готовый модуль для этого) - думаю самое простое
- отдавать видео самим nginx (а он прекрасно отдает файлы и в 10Гб) а для авторизации воспользоваться директивами nginx secure_link или AuthUrl -это несколько сложнее но лучше работает под большой нагрузкой
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для настройки стриминга видео большого размера в Nginx, вам потребуется выполнить несколько шагов:
1. Установите Nginx на ваш сервер, если он еще не установлен. Вы можете сделать это с помощью менеджера пакетов вашей операционной системы.
2. Подготовьте видеофайл, который вы планируете транслировать. Убедитесь, что файл имеет подходящий формат и кодеки для воспроизведения в браузере.
3. Создайте конфигурационный файл для Nginx, в котором будет настроен стриминг видео. Ниже приведен пример конфигурации для стриминга видеофайла с именем "video.mp4":
server { listen 80; server_name example.com; location /video { alias /path/to/video/directory; mp4; mp4_buffer_size 1M; mp4_max_buffer_size 5M; } }
4. Перезапустите Nginx, чтобы применить изменения в конфигурации. Вы можете сделать это с помощью команды `sudo systemctl restart nginx`.
5. Теперь вы можете обращаться к видеофайлу по URL вида "http://example.com/video/video.mp4" и стримить его через Nginx.
Убедитесь, что ваш сервер имеет достаточно ресурсов для обработки стриминга видео большого размера и что ваша сеть поддерживает передачу данных с высокой пропускной способностью. Также учитывайте, что стриминг видео может потреблять большой объем трафика, поэтому убедитесь, что у вас достаточно места на диске и трафика в вашем хостинге.