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

VovansystemS vovansystems на gmail.com
Ср Май 4 11:58:19 UTC 2016


Добрый день,

пытаюсь настроить ревалидацию страниц сайта в кеше директивой
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_cache_path /tmp/MAIN levels=1:2 keys_zone=MAIN:64m
max_size=768m inactive=24h;

server {

    listen          ***:443 ssl;
    server_name     site.com;

    ssl     on;

    ssl_certificate      /etc/nginx/ssl/certs-mcg/site_co_uk.pem;
    ssl_certificate_key  /etc/nginx/ssl/certs-mcg/site_co_uk.key;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    error_log /home/site/logs/site-ssl.error.log error;
    access_log /home/site/logs/site-ssl.access.log wtimes;

    root /www/site/domains/site.com/public_html/;
    set $sock 127.0.0.1:9001;

    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_intercept_errors on;
    fastcgi_param DOCUMENT_ROOT /public_html;
    fastcgi_param SCRIPT_FILENAME /public_html$fastcgi_script_name;

    fastcgi_no_cache $cookie_login $cookie_authautologin $cookie_PHPSESSID;
    fastcgi_cache_bypass $cookie_login $cookie_authautologin $cookie_PHPSESSID;
    fastcgi_cache_revalidate on;
    fastcgi_temp_path /tmp/fcgi 1 2;
    fastcgi_cache MAIN;
    fastcgi_cache_key "$scheme|$request_method|$host|$request_uri";
    fastcgi_cache_lock on;
    fastcgi_cache_methods GET HEAD;
    fastcgi_ignore_headers  "Cache-Control" "Expires";
    fastcgi_cache_valid 10s;
    add_header X-My-Cache $upstream_cache_status;
    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;

    index index.html index.php;

    location / {
        fastcgi_cache_revalidate on;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~* "^/wp-admin(/.*$|/$|$)" {
      fastcgi_cache off;
      try_files $fastcgi_script_name =404;
      fastcgi_pass $sock;
      add_header X-My-Cache-admin $upstream_cache_status;
    }

    location ~* "^/cart(/.*$|/$|$)" {
      fastcgi_cache off;
      try_files $fastcgi_script_name =404;
      fastcgi_pass $sock;
      add_header X-My-Cache-cart $upstream_cache_status;
    }


    location ~* \.php$ {
        fastcgi_cache_revalidate on;
        try_files $fastcgi_script_name =404;
        fastcgi_pass $sock;
    }

    # Static files location
    location ~*
^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|docx)$
{
        expires 60d;
        access_log off;
    }
}


версии софта:

nginx version: nginx/1.9.15 (из официального репозитория)
PHP 5.4.45-1~dotdeb+7.1
Debian GNU/Linux 7


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