mp4 pseudostreaming with proxy_pass and slice
Anatoliy Korostelevm, NGENIX
a.korostelev на ngenix.net
Пт Мар 18 07:53:34 UTC 2016
Здравствуйте!
Меня интересует возможность nginx, позволяющая проксировать запросы на
mp4 к бекэнду, чтобы при этом не было необходимости выкачивать на бекэнд
весь mp4 (файл может быть очень большим), а было лишь достаточно послать
range-запрос на необходимые данные, их закешировать и отдавать клиенту.
Для тестирования данной возможности я создал следующую конфигурацию
(привожу кусок):
location / {
proxy_pass http://someIP$uri;
proxy_set_header Host example.net
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
slice 1m;
proxy_set_header Range $slice_range;
proxy_cache_valid 200 206 1d;
proxy_cache irlem;
proxy_cache_key $uri$slice_range;
}
Все работает как и запланировано - если я шлю с клиента на nginx
Range-запрос, nginx и клиент получат необходимую часть данных,
выравненных по размеру slice. Однако, хотелось бы получать порцию
необходимых данных. использую не только Range-запросы, но и явно
указывая в URI момент начала (и возможно конца) видео. Например, чтобы
при запросе к nginx вида http://mynginx.server/test.mp4?start=40
хотелось бы что nginx преобразовывал start=40 в соответствующий
Range-запрос к бэкенду и выкачивал только необходимые данные. Я добавил
в конфигурацию своего location параметр mp4 для этого, однако, как
выяснилось, mp4 не совместим с proxy_pass. Подскажите, кто-то
реализовывал на nginx что-то подобное, и если реализовал то как? Или
единственный путь, это писать данную возможность самому (на lua,
ngscript, своим модулем, etc)?
С уважением,
Коростелев Анатолий
Подробная информация о списке рассылки nginx-ru