в debian, nginx

Использование модуля ngx_cache_purge для очистки кэша FastCGI

nginx
Мы уже упоминали о настройке кэширования на Nginx, рассматривали преимущества и примеры настроек кеширования (в том числе FastCGI), но не затронули такой важный вопрос, как очистка данных из кеша.

Давайте разберемся с очисткой кэша FastCGI в бесплатной версии веб-сервера Nginx с помощью модуля ngx_cache_purge!

Если в вашем случае кэширование в Nginx настроено с помощью параметра fastcgi_cache, то наверняка не раз задумывались об автоматической очистке кеша определенной страницы при ее обновлении. Штатная директива fastcgi_cache_purge, которая может решить данную проблему, к сожалению, доступна только как часть коммерческой подписки Nginx (Nginx+), а в бесплатной версии веб-сервера на помощь нам приходит модуль ngx_cache_purge.

Прежде всего, необходимо собрать Nginx с поддержкой данного модуля — ранее мы уже использовали самостоятельные сборки (с http2, с APLN, с brotli, с PageSpeed), поэтому никаких затруднений быть не должно.

Скачиваем и распаковываем исходники актуальной версии Nginx:

cd /opt/ && wget https://nginx.org/download/nginx-1.13.1.tar.gz && tar xf nginx-1.13.1.tar.gz

Получаем код модуля ngx_cache_purge:

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz && tar -zxvf ngx_cache_purge-2.3.tar.gz && mv ngx_cache_purge-2.3 ngx_cache_purge && rm ngx_cache_purge-2.3.tar.gz

Находясь в каталоге с исходниками Nginx собираем его:

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules \
--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-http_realip_module --with-http_addition_module --with-http_sub_module \
--with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module \
--with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module \
--with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module \
--with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector-strong \
-Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro \
-Wl,--as-needed' --add-module=/opt/ngx_cache_purge
make
make install
service nginx restart

Допустим, в секции http конфигурационного файла /etc/nginx/nginx.conf у нас уже есть следующие строки:

...
fastcgi_cache_path /var/www/nginx_cache levels=1:2 keys_zone=fcgi:100m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
...

Немного изменим настройки сайта (в секции server для основного хоста) добавив строки:

server {
...
  if ($request_method = PURGE) {
    set $method GET;
    rewrite ^(.*)$ /purge$1 last;
  }
...
  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/letsclearitup.sock;
    fastcgi_hide_header X-Powered-By;
    fastcgi_cache fcgi;
    fastcgi_cache_min_uses 1;
    fastcgi_cache_valid  200 302  1d;
    fastcgi_cache_valid  404      1m;
    fastcgi_cache_methods GET HEAD;
  }
...
  location ~ /purge(/.*) {
    fastcgi_cache_purge fcgi "$scheme$method$host$1";
  }
...
}

Теперь для очистки кэша определенной страницы с помощью модуля ngx_cache_purge необходимо отправить PURGE-запрос на эту страницу. Сделать это можно, например, с помощью утилиты curl:

curl -X PURGE -L https://letsclearitup.com.ua/nginx/nastroyka-keshirovaniya-na-nginx.html

Если такая страница была в кэше и его удалось успешно очистить, то результатом данного запроса будет следующее:

Successful purge

Key : httpsGETletsclearitup.com.ua/nginx/nastroyka-keshirovaniya-na-nginx.html

Path: /var/www/nginx_cache/7/9a/9dda1b3118148e6c036a2cf7df6db9a7

nginx

Если страницы в кэше не оказалось, то вы увидите следующее:

404 Not Found

nginx
HashFlare

Добавить комментарий