Driver86
@Driver86
Немодератор toster.ru

Почему nginx в данном случае не обновляет fastcgi кэш?

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), создаётся такое впечатление, что просто страница по каким-то причинам имеет статус, мол, "обновляюсь", но по факту никакого обновления нет.

Так что ли получается? И что с этим делать?
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы