Welcome! Log In Create A New Profile

Advanced

fastcgi_cache_background_update ssi подзапросов

May 10, 2017 12:04PM
Приветствую!

Директива fastcgi_cache_background_update странно ведёт себя при ssi подзапросах.
Есть сервис со сложной бизнес логикой, главная страница загружается 1 сек, стек nginx + php-fpm. В ходе оптимизации скорости загрузки было решено вынести генерацию самого долгого куска страницы в отдельный ssi подзапрос и кешировать его на 1 час. Кешированием управляет fastcgi сервер на php с помощью заголовка Cache-Control.

С кеширование проблем нет, nginx успешно кеширует подзапросы /ssi_dev/ и складывает их на диск. Проблемы начинаются когда кеш протухает.

Текущее поведение nginx
- если есть элемент в кеше, то он успешно отдается(HIT)
- если есть элемент в кеше, но он устарел, то клиенту отдаётся устаревшая версия(STALE) и делается подзапрос на прогрев кеша(EXPIRED)

Проблема заключается в том, что подзапрос на прогрев кеша выполняется в блокирующем режиме. То есть основной запрос ждёт выполнения подзапроса.
Указанная выше проблема не наблюдается, если в кеш класть всю страницу, поведение nginx соответствует документации. Клиенту отдаётся старая версия контента и делается неблокирующий подзапрос на обновление.

Конфиг nginx

location / {
try_files $uri /index_dev.php$is_args$args;
}

location ~ /ssi_dev/ {
access_log /var/log/nginx/access-dev.log ssi;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;

ssi on;
ssi_silent_errors off;

add_header X-Cache $upstream_cache_status;
add_header X-Cache-Control $upstream_http_cache_control;
add_header X-Expires $upstream_http_expires;

fastcgi_cache_methods GET HEAD;
fastcgi_cache MY_CACHE;

fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
fastcgi_cache_background_update on;

fastcgi_hide_header Cache-Control;
fastcgi_hide_header Expires;

fastcgi_param REQUEST_URI $uri$is_args$args;
fastcgi_param SCRIPT_FILENAME $document_root/index_dev.php;
fastcgi_cache_key $scheme$request_method$host$uri$is_args$args;

internal;
}

location ~ ^/(index_dev|config)\.php(/|$) {
access_log /var/log/nginx/access-dev.log main;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;

ssi on;
ssi_silent_errors off;

add_header X-Cache $upstream_cache_status;
add_header X-Cache-Control $upstream_http_cache_control;
add_header X-Expires $upstream_http_expires;

fastcgi_cache_methods GET HEAD;
fastcgi_cache MY_CACHE;

fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
fastcgi_cache_background_update on;

fastcgi_hide_header Cache-Control;
fastcgi_hide_header Expires;

fastcgi_param REQUEST_URI $request_uri;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_cache_key $scheme$request_method$host$request_uri$is_args$args;
}


Вопрос
Возможно ли обновлять устаревшие элементы кеша при ssi подзапросах в НЕ блокирующем режиме?
Subject Author Posted

fastcgi_cache_background_update ssi подзапросов

metalfm1 May 10, 2017 12:04PM

Re: fastcgi_cache_background_update ssi подзапросов

S.A.N May 10, 2017 01:23PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 109
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready