Если у вас на сервере есть только 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»).