Cache revalidation using If-None-Match

S.A.N nginx-forum at nginx.us
Thu Jul 17 12:17:08 UTC 2014


> Есть один способ:
> http://www.lexa.ru/nginx-ru/msg30320.html
> 
> И второй способ: просто не включать кеширование
> на стороне nginx в тех location`ах, где оно не нужно.

Есть и третий способ

if ($upstream_status = 304) {
 set no_cache = 1;
}

fastcgi_no_cache $no_cache;

Ещё как вариант, Nginx вообще не нужно удалять валидаторы из запроса, они
всегда должны уходить на бекенд, при получении статуса 304, когда нет файла
кеша Nginx, но в заголовке ответа указано что можно кешировать в публичном
кеше (не private), только в этом случаи Nginx должен сделать повторный
запрос к бекенду без валидаторов для получения нового контента со статусом
200.

Но можно и не делать повторный запрос, со временем придет юзер без
валидаторов и бекенд отдаст статус 200, в общем Nginx просто надо научить
понимать что заголовки Cache-Control в 304 статусе, не означают что нужно
кешировать ответ 304, они означают что нужно использовать прежний
закешированый ответ 200, по сути fastcgi_no_cache который я написал выше эту
проблему так и решает.

Я понимаю такая схема сложней для Nginx и ему проще просто всегда удалять
валидаторы если нет файла кеша, но я же смотрю с точки зрения бекенда, ему
лучше если валидаторы всегда приходят.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251189,251882#msg-251882



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