Re: Кто же сильнее Cache-Control или X-Accel-Expires?

Иван nginx на kinetiksoft.com
Чт Апр 20 18:12:14 UTC 2017


Здравствуйте!

Максим,спасибо за быстрый ответ! Может быть это указать в документации? Пока 
что процитированная часть документации, как мне кажется, прямо противоречит 
этому поведению.

С уважением, Иван.

В письме от 20 апреля 2017 21:08:33 пользователь Maxim Dounin написал:
> 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, полностью запрещающий
> кеширование, то кеширование будет запрещено.


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