Open file cache хранит дескрипторы открытых файлов, информацию об ошибках и метаданные. Это устраняет системные вызовы open() и stat() при каждом запросе:
http {
open_file_cache max=2048 inactive=600s;
open_file_cache_valid 2000s;
open_file_cache_min_uses 1;
open_file_cache_errors on;
}
Для каталога с 45 000 изображений товаров мы дополнительно монтировали горячий кэш в tmpfs:
# /etc/fstab
tmpfs /var/www/shopmaster/cache/hot tmpfs size=2g,mode=1777 0 0
# Монтируем
mount /var/www/shopmaster/cache/hot
Proxy cache для ответов бэкенда — главное оружие против нагрузки на PHP-FPM:
# Определяем зону кэша
proxy_cache_path /var/cache/nginx/shopmaster
levels=1:2
keys_zone=shop_cache:64m # 64 МБ для ключей (~500K записей)
max_size=4g # 4 ГБ для данных
inactive=60m
use_temp_path=off;
server {
# Кэширование страниц каталога
location /catalog/ {
proxy_pass http://php_backend;
proxy_cache shop_cache;
proxy_cache_valid 200 30m;
proxy_cache_valid 404 1m;
proxy_cache_key $scheme$host$request_uri;
proxy_cache_use_stale error timeout updating http_500 http_502;
# Заголовок для отладки (HIT/MISS/STALE)
add_header X-Cache-Status $upstream_cache_status;
# Блокировка дублирующих запросов
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
}
# Статика — кэшируем на клиенте
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
}
После включения proxy_cache hit rate достиг 78% для страниц каталога. Нагрузка на PHP-FPM упала в 4.5 раза, среднее время ответа — с 850 мс до 35 мс для кэшированных страниц.
Оставить комментарий