Очистка кэша 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
- Перейдите в Плагины → Добавить новый
- Найдите "Proxy Cache Purge" (slug:
varnish-http-purge) - Нажмите Установить сейчас, затем Активировать
wp plugin install varnish-http-purge --activate
Шаг 4: Настройте Proxy Cache Purge
В админке WordPress:
- Перейдите в Настройки → Proxy Cache Purge
- Установите "Установить пользовательский IP" на:
127.0.0.1 - Нажмите Сохранить настройки
Критическая настройка
Плагин должен отправлять запросы PURGE на 127.0.0.1 (localhost), а не на ваш публичный IP.
Шаг 5: Настройте бэкенд кэша NGINX
Начиная с Proxy Cache Purge 5.9.0, плагин нативно поддерживает формат wildcard purge NGINX. Настройте его для использования бэкенда NGINX:
- Перейдите в Proxy Cache Purge → Настройки
- В разделе Cache Backend выберите NGINX
- Нажмите Сохранить настройки
Добавьте в ваш 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