Cache revalidation using If-None-Match

Gena Makhomed gmm at csdoc.com
Thu Jul 17 09:09:32 UTC 2014


On 15.07.2014 6:37, S.A.N wrote:

> 1. Нельзя получить от клиента валидаторы (“If-Modified-Since” и
> “If-None-Match”) если файла кеша нет, эта ситуация возникает когда бекенд
> отдавал заголовки Cache-Control: private, для контента который должен
> кешироватся только в браузере (не публичный кеш).

Откуда nginx в момент отправки запроса на backend может знать
вернет ему backend в ответе заголовок Cache-Control: private или нет?

> Проблема решается если в конфиге прописать
> fastcgi_param HTTP_IF_NONE_MATCH      $http_if_none_match     if_not_empty;
> fastcgi_param HTTP_IF_MODIFIED_SINCE  $http_if_modified_since if_not_empty;
> Но тогда будет проблема с публичным кешем, потому что бекенд может получить
> валидаторы от браузера, ответить статусом 304, Cache-Control: public... и
> Nginx положит этот ответ (статусом 304 nobody) в файл своего кеша и будет
> его отдавать всем.

Вот именно поэтому nginx и убирает эти два заголовка
при отправке запроса на backend, если в location включено кеширование.

> Я уже писал, про эту проблему
> http://forum.nginx.org/read.php?21,245951,245951#msg-245951
> Хочется её как-то решить.

Есть один способ:
http://www.lexa.ru/nginx-ru/msg30320.html

И второй способ: просто не включать кеширование
на стороне nginx в тех location`ах, где оно не нужно.

> ...нет способа как динамически, сказать Nginx не использовать
> cache_use_stale для этого uri, прописать в конфиге все варианты этих uri
> сложно они динамические и не шаблонные, добавлять какой-то спец признак по
> которому можно создать общий location в принципе можно, но хочется более
> красивого и системного решения.

Более красивое и системное решение - это разнести uri с разными
настройками кеширования по разным location`ам или виртуальным
серверам в конфиге nginx.

Например, http://www.example.com/ - одна политика кеширования,
http://example.com/ - вторая, http://stat.example.com/ - третья.
Это если нельзя легко и просто разделить uri по префиксам location.

-- 
Best regards,
  Gena



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