Re: ревалидация кеша fastcgi

Maxim Dounin mdounin на mdounin.ru
Ср Май 4 12:13:44 UTC 2016


Hello!

On Wed, May 04, 2016 at 02:58:19PM +0300, VovansystemS wrote:

> Добрый день,
> 
> пытаюсь настроить ревалидацию страниц сайта в кеше директивой
> fastcgi_cache_revalidate on;
> ожидаю, что если элемент кеша устарел, то nginx сам сделает запрос к
> бекэнду с заголовком If-Modified-Since (как это описано тут
> http://whitequark.org/blog/2014/04/05/page-caching-with-nginx/ ), но
> этого не происходит.
> 
> при устаревании элемента кеша $upstream_cache_status == EXPIRED и на
> бэкэнд уходит стандартный GET без заголовков на ревалидацию при
> включённом fastcgi_cache_revalidate on.
> 
> я попробовал задавать fastcgi_cache_revalidate на разных уровнях, на
> случай если есть особенности наследования, но всё равно безуспешно.
> 
> если же я делаю
> curl -i --header 'If-Modified-Since: Tue, 11 Dec 2015 10:10:24 GMT'
> https://site.com
> 
> то получаю X-My-Cache: REVALIDATED - потому что клиентский заголовок
> был корректно передан на бэкэнд, который ответил header('HTTP/1.0 304
> Not Modified');
> 
> вопрос: я не понимаю как должна работать директива и хочу странного
> или всё же задачу можно как-то решить? подскажите, пожалуйста.

[...]

>     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;

У вас в конфиге написано: установить заголовки If-None-Match и 
If-Modified-Since в запросах к бекенду в полученные от клиента 
значения.  Ревалидация кеша в таких условиях работать не может по 
очевидным причинам.

-- 
Maxim Dounin
http://nginx.org/



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