Кэширование PHP-FPM в nginx

Если у вас на сервере есть только nginx и он обрабатывает PHP с помощью PHP-FPM, то кэширование отдаваемого им контента настраивается ещё проще, чем в случае с проксированием (например, когда есть Apache на бэкенде) и сопряжено с меньшим количеством сложностей.

Итак, первым делом создаём каталог, в котором будет складываться кэш (либо убеждаемся, что он уже существует) и меняем владельца на того пользователя, под которым nginx работает:
mkdir -p /var/cache/nginx
chown -R nginx:nginx /var/cache/nginx

Далее, в /etc/nginx/nginx.conf в секции http указываем путь к созданному каталогу и ключ, по которому будут кэшироваться fastcgi-ответы от PHP-FPM:

http {
....
  fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:10m inactive=4h;
  fastcgi_cache_key "$scheme$request_method$host$request_uri";
....
}

Вот тут внимательно — параметр keys_zone=MYCACHE:10m определяет имя зоны (мы будем его использовать далее в секции server, для которого будем настраивать кэширование, и этих имён может быть много, с разными настройками для разных случаев, либо, напротив, можно использовать одно и то же для разных сайтов), и размер пула для ключей, другими словами — максимальное количество возможных кэшированных запросов. Согласно официальной документации, для хранения 8 тысяч ключей достаточно 1 мегабайта, подбирайте из собственных нужд. А параметр inactive означает, что если к данным никто не обращался в течение указанного времени, они будут выброшены из кэша независимо от их свежести или других факторов.

Теперь всё, что нужно — отыскать location, в котором описана обработка PHP на нашем сайте, и указать как минимум 2 директивы:

location ~ \.php$ {
....
  fastcgi_cache MYCACHE; 
  fastcgi_cache_valid 200 4h;
....
}

Первая из них указывает на зону ключей, которую мы определили выше, вторая — выбирает, какой тип ответов и на какое время будет кэширован (в моём примере — кэшируются только 200-е ответы на 4 часа).
По большому счёту, этого уже достаточно для работы. Отдельно хочется отметить, что с приведёнными настройками не возникает проблем с WordPress и cookie при логине в административную часть сайта (в частности, не возникает ошибка «Cookies либо заблокированы, либо не поддерживаются вашим браузером. Чтобы использовать WordPress на хостинге, нужно разрешить cookies»).

Этот сайт использует файлы cookie, систему Google Analytics для сбора статистики о посетителях сайта, а также для сбора данных, таких как ваш IP и геолокация. Подробнее о нашей политике обработки персональных данных. Продолжая использовать текущий веб-сайт, Вы автоматически соглашаетесь с использованием описанных технологий.