Если у вас в Nginx настроено кэширование с помощью параметра fastcgi_cache, то вы наверняка задумывались над реализацией функции, которая каждый раз при обновлении страниц сайта выполняла бы автоматическую очистку. Для этих целей в Nginx предусмотрена штатная директива fastcgi_cache_purge, которая задает условия для использования запроса на очистку кэша.
Проблема заключается в том, что использование директивы fastcgi_cache_purge доступно только как часть коммерческой подписки Nginx. Как альтернативное решение я предлагаю использовать модуль ngx_cache_purge. Нужно отметить, что кроме fastcgi модуль поддерживает очистку Proxy, SCGI и uWSGI кэш в Nginx.
Для очистки кэша на стороне CMS должна работать специальная функция, которая при каждом обновлении будет отправлять серверу специально сформированных запрос. В этой статье я расскажу о использовании директивы fastcgi_cache_purge на примере WordPress, для которого уже есть готовый плагин.
Чтобы добавить поддержку директивы fastcgi_cache_purge нам необходимо собрать Nginx из исходников. В своей предыдущей статье я уже описывал процесс сборки Nginx из исходников. Из этой инструкции вам необходимо выполнить все пункту предшествующие процессу сборки пакета. Если кратко, то у вас должны быть загружены исходники Nginx и все необходимы для сборки пакеты.
Далее загружаем и распаковываем исходники модуля ngx_cache_purge:
# wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz # tar -xzf ngx_cache_purge-2.3.tar.gz
Откройте файл, отвечающий за параметры сборки пакета:
# nano /tmp/nginx-1.9.9/debian/rules
В этом файле нужно найдти секцию override_dh_auto_build и добавить в конец директиву --add-module, которая указывает на директорию размещения модуля ngx_cache_purge:
CFLAGS="" ./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
$(WITH_HTTP2) \
--with-cc-opt="$(CFLAGS)" \
--with-ld-opt="$(LDFLAGS)" \
--add-module=/usr/src/ngx_cache_purge-2.3
dh_auto_build
Сохраняем файл, переходим в корень каталога с исходниками Nginx и запускаем команду сборки пакета:
# cd /usr/src/nginx-1.9.9 # dpkg-buildpackage -rfakeroot -uc -b
Команда выполнит компиляцию исходников и автоматически соберет deb-пакет nginx_1.9.3-1~jessie_i386.deb. Установим Nginx запустив команду:
# dpkg -i nginx_1.9.3-1~jessie_i386.deb
Откройте файл и измените настройки виртуального хоста Nginx. Добавьте в секцию server, который будет отвечать за функцию очистки кэша FastCGI:
location ~ /purge(/.*) {
fastcgi_cache_purge KEYS_ZONE_NAME "$scheme$request_method$host$1";
}
Чтобы работала функция очистки кэша, вам необходимо заменить KEYS_ZONE_NAME на свое значение параметра keys_zone. Проверяем конфигурацию и применяем настройки Nginx. Для Debian/Ubuntu выполните команды:
# nginx -t # service nginx reload
И последний шаг. В админке WordPress установите плагин Nginx Helper.