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