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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru