Организация кэширования только медленных ответов сервера при помощи Nginx |
[исправить] |
Пример организации на стороне фронтэнда кэширования контента, который начинает
отдаётся бэкендом дольше, чем через 3 секунды. Запросы, которые отдаются менее,
чем за 3 секунды передаются клиенту минуя кэш. Время жизни записи в кэше
составляет 60 секунд. Для расчёта времени отдачи используются два блока vhost
с передачей переменной со временем задержки в заголовке X-Accel-Expires,
созданной при помощи директивы "map".
proxy_cache_path /home/tmpcache/mycache levels=1:2 keys_zone=example:10m;
# Для запросов дольше 3 секунд устанавливаем время жизни записи в кэше в 60 секунд, иначе 0 (отдаём минуя кэш).
map $request_time $longtime {
"~^([3-9]|[1-9][0-9]+)\\." 60;
default 0;
}
server {
listen 127.0.0.1:8888;
root /var/www/;
server_name example.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_pass http://mybackend;
add_header X-Accel-Expires $longtime;
}
}
server {
listen 8080;
root /var/www/;
server_name example.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8888;
proxy_cache example;
proxy_cache_valid 200 0m;
add_header X-Cached $upstream_cache_status;
add_header X-Time $request_time;
}
}
Проверка:
# curl -I "http://example.com:8080/mylongrequest"
...
X-Cached: MISS
X-Time: 11.862
повторный запрос будет выдан из кэша:
# curl -I "http://example.com:8080/mylongrequest"
...
X-Cached: HIT
X-Time: 0.000
|
|
|
|
Раздел: Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Редирект, mod_rewrite |