+7 499 67 76 152 Звоните с 10:00 до 18:00 (по МСК)
Регистрация

Кэширование 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»).

Категории: Администрирование Linux  
Mарк
2016-04-22 15:33:15
Я недавно работаю с WordPress, все делаю под админом. А как узнать пользователя, под которым работает nginx? Можно ли сделать, чтобы каталог для кэша создался автоматически под этим пользователем?
МикроМакс
2016-04-19 17:03:33
Кэширование в NGINX действительно забавная, простая и удобная штука, но в данной статье ничего не говорится о том, как принудительно можно удалить кэш, при необходимости, а точнее о том, что можно просто удалить папки кэша. Т.е. можно сделать доморощенную систему инвалидации кэш, когда происходит большое обновление или прошло кэширование чего-то ненужного, просто взять и очистить папки кэша.
Виталий
2016-03-24 14:07:56
Кэширование действительно добавляет скорости работы сайтам, убеждаюсь не первый раз на собственном опыте. Практически всегда пользуюсь апачем в бэкенде, но оказывается с одним NGINX все выходит даже проще в настройке, а это уже повод мне задуматься, ведь чем проще, тем надежнее.
Roma
2016-05-13 17:59:35
Использовать NGINX реально проще. Мне лично было познавательно прочитать данную статью. Познавательно. Для меня непонятно как принудительно почистить кеш. С WordPress не работал но здесь для себя тоже прочитал интересную информацию. МикроМакс, удаление или чистка папки это хорошая идея ))