Nginx: fastcgi_cache для WordPress с bypass админки
Кеширование ответов PHP через fastcgi_cache: зона в http{}, bypass для wp-admin, POST, cookie. Заголовок X-FastCGI-Cache для проверки HIT/MISS.
Как использовать
- В nginx.conf в блоке http {} добавьте fastcgi_cache_path и fastcgi_cache_key.
- В server {} сайта в location для .php добавьте set $skip_cache, условия и директивы fastcgi_cache*.
- Создайте /var/cache/nginx и права: chown -R www-data:www-data /var/cache/nginx.
- Проверка: curl -I https://example.com → заголовок X-FastCGI-Cache (MISS, затем HIT).
Без fastcgi_cache Nginx каждый запрос к PHP отдаёт в PHP-FPM; страница генерируется заново и TTFB высокий. Кеш по ключу URL отдаёт готовый ответ для анонимных запросов; админку и авторизованных пользователей нужно обходить (bypass).
Зона кеша в http {}
Файл: /etc/nginx/nginx.conf, блок http { }.
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Создание директории и права:
mkdir -p /var/cache/nginx
chown -R www-data:www-data /var/cache/nginx
Bypass и location для PHP
В конфиге сайта (например /etc/nginx/sites-available/example.com) в server { }:
set $skip_cache 0;
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-login.php") {
set $skip_cache 1;
}
if ($http_cookie ~* "wordpress_logged_in") {
set $skip_cache 1;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status;
}
skip_cache = 1— не отдавать из кеша и не писать в кеш (админка, POST, авторизованные).fastcgi_cache_valid 200 60m— кешировать ответы 200 на 60 минут.X-FastCGI-Cache— для отладки: MISS при первом запросе, HIT при повторном.
Подробнее: WordPress: ускоряем Nginx + PHP-FPM до TTFB меньше 300 мс.