ревалидация кеша 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