fastcgi_cache_path /var/tmp/cache-html levels=1:2 keys_zone=cache_html:16m inactive=1y max_size=4g;
location /index.php {
internal;
try_files /index.php =403;
include fastcgi_params;
fastcgi_pass unix:/etc/alternatives/php-fpm.sock;
set_by_lua_block $key {
return ngx.var.request_language .. '/' .. ngx.var.request_uri:sub(1, (ngx.var.request_uri:find('?') or (ngx.var.request_uri:len() + 1)) - 1):gsub('[/\\]+', '/')
}
fastcgi_cache_key $key;
fastcgi_cache cache_html;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_background_update on;
fastcgi_cache_use_stale updating;
gzip off;
gunzip on;
}
php (fastcgi) в ответе отдаёт заголовок X-Accel-Expires (+ Expires), и в соответствии с ним nginx кэширует у себя этот ответ.
И вроде как работает норм, но изредка бывает так, что кэш не обновляется (т.е. постоянно отображается старая страница).
Нашёл в кэше эту страницу, смотрю - и действительно:
X-Accel-Expires: @1598649662
Т.е. просрочено ещё вчера.
Вообще, судя по описанию fastcgi_cache_background_update: on
Позволяет запустить фоновый подзапрос для обновления просроченного элемента кэша, в то время как клиенту возвращается устаревший закэшированный ответ. Использование устаревшего закэшированного ответа в момент его обновления должно быть разрешено
(разрешено с помощью fastcgi_cache_use_stale_updating: updating), создаётся такое впечатление, что просто страница по каким-то причинам имеет статус, мол, "обновляюсь", но по факту никакого обновления нет.
Так что ли получается? И что с этим делать?