Перейти к содержанию

Очистка кэша WordPress на VPS

Мгновенная, автоматическая недействительность кэша для WordPress на любом VPS или выделенном сервере на базе RHEL.


  • Автоматическая недействительность


    Кэш очищается автоматически при редактировании постов, страниц или комментариев

  • Хирургическая точность


    Очищается только измененная страница — весь ваш сайт остается закэшированным и быстрым

  • Настройка за 5 минут


    Простая конфигурация с нашими предустановленными модулями NGINX

  • Кэширование на диске


    Кэш сохраняется после перезапуска NGINX — нет холодного кэша после обновлений


Предварительные требования

  • VPS или выделенный сервер с установленной RHEL 7/8/9, Rocky Linux, AlmaLinux или Amazon Linux
  • Установленный NGINX (рекомендуется из репозитория GetPageSpeed)
  • Сайт WordPress с настроенным кэшированием полной страницы

Быстрая настройка

Шаг 1: Установите модуль очистки кэша

# Установите репозиторий GetPageSpeed
dnf -y install https://extras.getpagespeed.com/release-latest.rpm

# Установите модуль очистки кэша
dnf -y install nginx-module-cache-purge

Включите модуль в /etc/nginx/nginx.conf:

load_module modules/ngx_http_cache_purge_module.so;

Шаг 2: Настройте прокси-кэш NGINX

Если у вас еще не настроено прокси-кэширование, вот полная настройка:

Отредактируйте /etc/nginx/nginx.conf или создайте /etc/nginx/conf.d/proxy-cache.conf:

# Определите зону кэша (в блоке http)
proxy_cache_path /var/cache/nginx/wordpress
                 levels=1:2
                 keys_zone=wordpress:100m
                 max_size=10g
                 inactive=60m
                 use_temp_path=off;

В вашем блоке сервера:

server {
    listen 80;
    server_name example.com;

    # Включите кэширование
    proxy_cache wordpress;
    proxy_cache_valid 200 60m;
    proxy_cache_valid 404 1m;
    proxy_cache_key "$scheme$request_method$host$request_uri";

    # Добавьте заголовок статуса кэша
    add_header X-Cache-Status $upstream_cache_status;

    # Включите метод PURGE (только для localhost)
    proxy_cache_purge PURGE from 127.0.0.1;

    location / {
        proxy_pass http://127.0.0.1:8080;  # Ваш бэкенд
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Создайте директорию кэша:

mkdir -p /var/cache/nginx/wordpress
chown nginx:nginx /var/cache/nginx/wordpress
nginx -t && systemctl reload nginx

Шаг 3: Установите плагин Proxy Cache Purge

  1. Перейдите в Плагины → Добавить новый
  2. Найдите "Proxy Cache Purge" (slug: varnish-http-purge)
  3. Нажмите Установить сейчас, затем Активировать
wp plugin install varnish-http-purge --activate

Шаг 4: Настройте Proxy Cache Purge

В админке WordPress:

  1. Перейдите в Настройки → Proxy Cache Purge
  2. Установите "Установить пользовательский IP" на: 127.0.0.1
  3. Нажмите Сохранить настройки

Критическая настройка

Плагин должен отправлять запросы PURGE на 127.0.0.1 (localhost), а не на ваш публичный IP.


Шаг 5: Настройте бэкенд кэша NGINX

Начиная с Proxy Cache Purge 5.9.0, плагин нативно поддерживает формат wildcard purge NGINX. Настройте его для использования бэкенда NGINX:

  1. Перейдите в Proxy Cache Purge → Настройки
  2. В разделе Cache Backend выберите NGINX
  3. Нажмите Сохранить настройки

Добавьте в ваш wp-config.php:

define( 'VHP_PURGE_BACKEND', 'nginx' );
Устаревшее: версия плагина < 5.9.0

Если вы используете Proxy Cache Purge версии ниже 5.9.0, создайте wp-content/mu-plugins/nginx-cache-purge-fix.php:

<?php
/**
 * Имя плагина: Исправление очистки кэша NGINX
 * Описание: Добавляет подстановочный знак к URL для совместимости с заголовком Vary
 */
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
    if (empty($pregex)) {
        $purgeme .= "*";
    }
    return $purgeme;
}, 10, 6);

Протестируйте настройку

# 1. Закэшируйте страницу
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (первый запрос)
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT (закэшировано!)

# 2. Очистите страницу
curl -sX PURGE 'http://127.0.0.1/sample-page/*' -H 'Host: example.com'
# <h1>Успешная очистка</h1>

# 3. Проверьте, что кэш очищен
curl -sI http://127.0.0.1/sample-page/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS (очищен!)

Как это работает

flowchart LR
    subgraph WP["WordPress"]
        A["📝 Пост обновлен"] --> B["🔌 Плагин"]
    end

    B -->|"PURGE /post/*"| C

    subgraph NG["NGINX"]
        C["🗑️ cache_purge"] --> D["✅ Страница удалена"]
    end

    E["👤 Посетитель"] -->|"GET /post/"| NG
    D --> F["Подана свежая информация"]

    style WP fill:#4a90d9,stroke:#2d5986,color:#fff
    style NG fill:#009639,stroke:#006325,color:#fff

Советы по производительности

  • Используйте RAM-диск для горячего кэша


    Смонтируйте /var/cache/nginx как tmpfs для максимально быстрых чтений кэша

    mount -t tmpfs -o size=2G tmpfs /var/cache/nginx
    
  • Нормализуйте заголовки сжатия


    Уменьшите варианты кэша с помощью модуля compression-normalize

  • Обходите кэш для вошедших пользователей


    proxy_cache_bypass $cookie_wordpress_logged_in;
    

Соображения по безопасности

Ограничение from 127.0.0.1 является критическим:

proxy_cache_purge PURGE from 127.0.0.1;

Без него любой мог бы очистить ваш кэш, отправив запросы PURGE.

Для дополнительной безопасности вы также можете:

# Разрешить PURGE только с определенных IP
proxy_cache_purge PURGE from 127.0.0.1 10.0.0.0/8;

# Или требовать аутентификацию
# (не охвачено в этом руководстве)

Устранение неполадок

X-Cache-Status всегда показывает MISS
  • Проверьте, что директива proxy_cache включена
  • Убедитесь, что директория кэша существует и доступна для записи nginx
  • Проверьте, что правила proxy_cache_bypass не срабатывают постоянно
PURGE возвращает 404
  • Убедитесь, что директива proxy_cache_purge находится в правильном блоке location
  • Проверьте, что модуль загружен: nginx -V 2>&1 | grep cache_purge
Директория кэша заполняется
  • Настройте max_size в proxy_cache_path
  • Уменьшите таймаут inactive
  • Запустите nginx -s reload, чтобы инициировать очистку менеджера кэша

Связанные

  • Модуль cache-purge


    Полная справка по директивам

    Документация

  • Модуль compression-normalize


    Уменьшите варианты кэша

    Документация

  • Руководство по кэшированию FastCGI


    Альтернативный метод кэширования для PHP-FPM

    FastCGI Cache