Nginx content caching
Общие понятия
Когда caching включен, Nginx сохраняет ответы на дисковом кэше и использует их для ответа клиентам, таким образом не приходится заново обрабатывать запрос.
Включение caching
1. Кэширование включается путем добавления директивы proxy_cache_path в контекст верхнего уровня http{}. В параметре директивы указывается путь к локальной файловой системе и размер выделенной памяти для хранения кэша.
2. Затем включить директиву proxy_cache в context(тип протокола, server, location)
http {
# ...
proxy_cache_path /data/nginx/cache keys_zone=mycache:10m;
server {
proxy_cache mycache;
location / {
proxy_pass http://localhost:8000;
}
}
}
Кэшированные ответы хранятся вместе с метаданными.
В кешировании участвуют два дополнительных процесса:
cache manager(активируется для проверки состояния кеша и если размер кеша превышает установленный, он удаляет данные последнего доступа)
cache loader(включается один раз при старте nginx и загружает ранее кешированные данные в общую память, поэтому в течении первых нескольких минут, это влияет на скорость загрузки. Это можно избежать путем включения дополнительных параметров в директиву proxy_cache_path:
loader_threshold - продолжительность итерации в милисек.
loader_files - max. кол-во элементов загруженное за одну итерацию
loader_sleeps - задержка между итерациями
proxy_cache_path /data/nginx/cache keys_zone=mycache:10m loader_threshold=300 loader_files=200;
Дополнительные параметры:
levels — уровень вложенности каталогов
inactive - время по истечении которого кэш очищается
max_size — максимальный размер данных под кэш(иначе удаляет данные)
Примечание
Отдельно настраивается кеширование для fastcgi_pass
Можно задавать кеширование для отдельных страниц, используя директиву location
Можно значительно ускорить процесс кэширования, если хранить кэш в оперативной памяти
Пример комбинированной настройки кэширования
http {
# ...
proxy_cache_path /data/nginx/cache keys_zone=mycache:10m loader_threshold=300
loader_files=200 max_size=200m;
server {
listen 8080;
proxy_cache mycache;
location / {
proxy_pass http://backend1;
}
location /some/path {
proxy_pass http://backend2;
proxy_cache_valid any 1m;
proxy_cache_min_uses 3;
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
}
}
}
Источники
Связанные темы
Оптимизация производительности
Настройка виртуального сервера Nginx