NGINX
#nginx#wordpress#fastcgi-cache#php-fpm#ttfb#production#caching

Nginx: fastcgi_cache для WordPress с bypass админки

Кеширование ответов PHP через fastcgi_cache: зона в http{}, bypass для wp-admin, POST, cookie. Заголовок X-FastCGI-Cache для проверки HIT/MISS.

Как использовать

  1. В nginx.conf в блоке http {} добавьте fastcgi_cache_path и fastcgi_cache_key.
  2. В server {} сайта в location для .php добавьте set $skip_cache, условия и директивы fastcgi_cache*.
  3. Создайте /var/cache/nginx и права: chown -R www-data:www-data /var/cache/nginx.
  4. Проверка: 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 мс.