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

cache-purge: Модуль очистки кэша NGINX

Установка

Вы можете установить этот модуль в любом дистрибутиве на базе RHEL, включая, но не ограничиваясь:

  • RedHat Enterprise Linux 7, 8, 9 и 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-cache-purge
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-cache-purge

Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_cache_purge_module.so;

Этот документ описывает nginx-module-cache-purge v2.5.8, выпущенный 29 января 2026 года.


ngx_cache_purge — это модуль nginx, который добавляет возможность очищать содержимое из кэшей FastCGI, proxy, SCGI и uWSGI. Операция очистки удаляет содержимое с тем же ключом кэша, что и запрос на очистку.

Спонсоры

Работа над оригинальным патчем была полностью профинансирована yo.se.

Директивы конфигурации (одинаковый синтаксис местоположения)

fastcgi_cache_purge

  • синтаксис: fastcgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]]
  • по умолчанию: none
  • контекст: http, server, location

Разрешает очистку выбранных страниц из кэша FastCGI.

proxy_cache_purge

  • синтаксис: proxy_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]]
  • по умолчанию: none
  • контекст: http, server, location

Разрешает очистку выбранных страниц из кэша proxy.

scgi_cache_purge

  • синтаксис: scgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]]
  • по умолчанию: none
  • контекст: http, server, location

Разрешает очистку выбранных страниц из кэша SCGI.

uwsgi_cache_purge

  • синтаксис: uwsgi_cache_purge on|off|<method> [purge_all] [from all|<ip> [.. <ip>]]
  • по умолчанию: none
  • контекст: http, server, location

Разрешает очистку выбранных страниц из кэша uWSGI.

Директивы конфигурации (отдельный синтаксис местоположения)

fastcgi_cache_purge

  • синтаксис: fastcgi_cache_purge zone_name key
  • по умолчанию: none
  • контекст: location

Устанавливает область и ключ, используемые для очистки выбранных страниц из кэша FastCGI.

proxy_cache_purge

  • синтаксис: proxy_cache_purge zone_name key
  • по умолчанию: none
  • контекст: location

Устанавливает область и ключ, используемые для очистки выбранных страниц из кэша proxy.

scgi_cache_purge

  • синтаксис: scgi_cache_purge zone_name key
  • по умолчанию: none
  • контекст: location

Устанавливает область и ключ, используемые для очистки выбранных страниц из кэша SCGI.

uwsgi_cache_purge

  • синтаксис: uwsgi_cache_purge zone_name key
  • по умолчанию: none
  • контекст: location

Устанавливает область и ключ, используемые для очистки выбранных страниц из кэша uWSGI.

Директивы конфигурации (необязательные)

cache_purge_response_type

  • синтаксис: cache_purge_response_type html|json|xml|text
  • по умолчанию: html
  • контекст: http, server, location

Устанавливает тип ответа для результата очистки.

Частичные ключи

Иногда невозможно передать точный ключ кэша для очистки страницы. Например, когда содержимое cookie или параметры являются частью ключа. Вы можете указать частичный ключ, добавив звездочку в конце URL.

curl -X PURGE /page*

Звездочка должна быть последним символом ключа, поэтому вы должны поставить переменную $uri в конце.

Пример конфигурации (одинаковый синтаксис местоположения)

http {
    proxy_cache_path  /tmp/cache  keys_zone=tmpcache:10m;

    server {
        location / {
            proxy_pass         http://127.0.0.1:8000;
            proxy_cache        tmpcache;
            proxy_cache_key    "$uri$is_args$args";
            proxy_cache_purge  PURGE from 127.0.0.1;
        }
    }
}

Пример конфигурации (одинаковый синтаксис местоположения - очистка всех кэшированных файлов)

http {
    proxy_cache_path  /tmp/cache  keys_zone=tmpcache:10m;

    server {
        location / {
            proxy_pass         http://127.0.0.1:8000;
            proxy_cache        tmpcache;
            proxy_cache_key    "$uri$is_args$args";
            proxy_cache_purge  PURGE purge_all from 127.0.0.1 192.168.0.0/8;
        }
    }
}

Пример конфигурации (отдельный синтаксис местоположения)

http {
    proxy_cache_path  /tmp/cache  keys_zone=tmpcache:10m;

    server {
        location / {
            proxy_pass         http://127.0.0.1:8000;
            proxy_cache        tmpcache;
            proxy_cache_key    "$uri$is_args$args";
        }

        location ~ /purge(/.*) {
            allow              127.0.0.1;
            deny               all;
            proxy_cache        tmpcache;
            proxy_cache_key    "$1$is_args$args";
        }
    }
}

Пример конфигурации (необязательный)

http {
    proxy_cache_path  /tmp/cache  keys_zone=tmpcache:10m;

    cache_purge_response_type text;

    server {

        cache_purge_response_type json;

        location / { #json
            proxy_pass         http://127.0.0.1:8000;
            proxy_cache        tmpcache;
            proxy_cache_key    "$uri$is_args$args";
        }

        location ~ /purge(/.*) { #xml
            allow              127.0.0.1;
            deny               all;
            proxy_cache        tmpcache;
            proxy_cache_key    "$1$is_args$args";
            cache_purge_response_type xml;
        }

        location ~ /purge2(/.*) { # json
            allow              127.0.0.1;
            deny               all;
            proxy_cache        tmpcache;
            proxy_cache_key    "$1$is_args$args";
        }
    }

    server {

        location / { #text
            proxy_pass         http://127.0.0.1:8000;
            proxy_cache        tmpcache;
            proxy_cache_key    "$uri$is_args$args";
        }

        location ~ /purge(/.*) { #text
            allow              127.0.0.1;
            deny               all;
            proxy_cache        tmpcache;
            proxy_cache_key    "$1$is_args$args";
        }

        location ~ /purge2(/.*) { #html
            allow              127.0.0.1;
            deny               all;
            proxy_cache        tmpcache;
            proxy_cache_key    "$1$is_args$args";
            cache_purge_response_type html;
        }
    }
}

Решение проблем

  • Включение gzip_vary может привести к различным результатам при очистке. При его включении у вас могут возникнуть проблемы с очисткой кэша. Для надежной работы вы можете отключить gzip_vary внутри местоположения #20.

Тестирование

ngx_cache_purge поставляется с полным набором тестов на основе Test::Nginx.

Вы можете протестировать его, запустив:

$ prove

См. также

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-cache-purge.