Re: Кто же сильнее Cache-Control или X-Accel-Expires?
Maxim Dounin
mdounin на mdounin.ru
Чт Апр 20 18:08:33 UTC 2017
Hello!
On Thu, Apr 20, 2017 at 08:17:07PM +0300, Иван wrote:
> Здравствуйте!
>
> Есть конфиг бэкэнда, вот его кусочек:
>
> location ~ \.m3u8$ {
> expires -1;
> add_header "X-Accel-Expires" "100"
> }
>
> Как следует из русской и английской документации:
> http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_cache_valid
> (кстати, как делать красивые короткие ссылки на документацию, которыми
> оперирует в этом списке рассылки команда nginx?)
>
> > Если в заголовке нет поля “X-Accel-Expires”, параметры кэширования
> > определяются по полям заголовка “Expires” или “Cache-Control”.
>
> То есть можно предположить, что приоритет у X-Accel-Expires.
> Но нет. Как показывает моя практика и, например, этот вопрос:
> https://serverfault.com/questions/641367/nginx-using-x-accel-expires-with-cache-control
>
> Приоритет имеет Cache-control. То есть в такой конфигурации на фронтэнде:
>
> location ^~ /video/ {
> proxy_buffer_size 16k;
> proxy_buffers 32 16k;
>
> proxy_cache video;
> proxy_cache_lock on;
>
> proxy_cache_use_stale updating;
> proxy_cache_key "$proxy_host$uri";
>
> proxy_pass http://backend;
> }
>
> m3u8 файлы, проходящие через этот локейшен на приведенный выше локейшен
> бэкэнда кешироваться не будут. Ситуацию спасает только
> proxy_ignore_headers Expires Cache-Control;
>
> Подскажите, пожалуйста, где ошибка: в nginx, документации или моём понимании
> того или другого?
Текущая реализация такова, что если до заголовка X-Accel-Expires
встретится заголовок Cache-Control или Expires, запрещающий
кеширование совсем, то кеширование будет запрещено.
То же самое с Cache-Control vs. Expires: в соответствии со
стандартом HTTP/1.1 заголовок Cache-Control имеет приоритет, но
если до него в ответе был заголовок Expires, полностью запрещающий
кеширование, то кеширование будет запрещено.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru