Как настроить стриминг видео большого размера в 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"


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


Содержимое 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    Наверху
  • Вопрос задан
  • 1227 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Drozer
Попробуйте увеличить размер ответа от сервера в конфиге nginx max_response_body_size = ...
Ответ написан
Комментировать
@dxp
Web developer
Неплохо было конечно запостить конфиг nginx полностью (так как самое интересное как раз пропущено)
Попробую предположить: вы используется python для авторизации доступа к видео и после авторизации выдаете файл средствами python?
Если так, то есть несколько более гуманных способов:
  • использовать в скрипте отдачи видео HTTP заголовок X-Accel-Redirect вместо отдачи самим скриптом (емнип у Джанго даже есть готовый модуль для этого) - думаю самое простое
  • отдавать видео самим nginx (а он прекрасно отдает файлы и в 10Гб) а для авторизации воспользоваться директивами nginx secure_link или AuthUrl -это несколько сложнее но лучше работает под большой нагрузкой
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы