proxy cache с заголовком Range.

kycedbi nginx-forum на forum.nginx.org
Вт Май 10 17:40:51 UTC 2016


Коллеги, здравствуйте.
Использую nginx для проксирования и кэширования на диск видео-файлов (mp4)
из социальной сети ВКонтакте.
Приложение на php узнаёт ссылку на файл на удалённом сервере, определяет где
будет хранится файл на диске и отдаёт эту информацию в заголовком 
Для воспроизведения видео на сайте используется html5-плеер, который, для
определения возможности перемотки на ещё не загрузившийся момент, к
заголовку запроса добавляет "Range: bytes=0-" и если сервер ответил кодом
206, то даёт возможность делать такую перемотку, если код 200, то такой
возможности не предоставляется.
Но nginx кэширует ответы только с кодом 200, а 206 с "Range: bytes=0-" нет.
В принципе, это хорошо, т.к. неполные файлы в кэше не нужны, но в данном
ситуации кэшировать файлы с помощью nginx не представляется возможным (т.к.
плеер всегда делает запрос с заголовком Range).

Демонстрационный-код + конфиг:
https://gist.github.com/anonymous/07a89471f2d2c7a18bda8f0464c3091e

Подскажите, пожалуйста, как можно сделать, чтобы nginx таки кэшировал
файлы?
Мне видятся 2 варианта решения данного вопроса:
- из php возвращать код 206 и сделать 2 location, один из которых будет
поддерживать заголовок Range, но не будет сохранять файл на диск, а второй
будет слать запрос к удалённому серверу без Range и nginx будет сохранять на
диск файл;
- написать что-то в конфиге nginx, чтобы он заменял код 200 на 206, при
наличии заголовка "Range: bytes=0-";
Но как реализовать любой из них - не представляю.

P.S. Flash-плеер, который не умеет слать заголовок Range, использовать нет
возможности.

Благодарю.
С уважением.

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,266769,266769#msg-266769



Подробная информация о списке рассылки nginx-ru