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

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

Установка на Debian/Ubuntu

Эти документы применяются к APT пакету nginx-module-cache-purge, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-cache-purge
Показать наборы и архитектуры
| Дистрибутив | Версия             | Компонент   | Архитектуры   |
|-------------|--------------------|-------------|----------------|
| debian      | bookworm           | main        | amd64, arm64   |
| debian      | bookworm-mainline  | main        | amd64, arm64   |
| debian      | trixie             | main        | amd64, arm64   |
| debian      | trixie-mainline    | main        | amd64, arm64   |
| ubuntu      | focal              | main        | amd64, arm64   |
| ubuntu      | focal-mainline     | main        | amd64, arm64   |
| ubuntu      | jammy              | main        | amd64, arm64   |
| ubuntu      | jammy-mainline     | main        | amd64, arm64   |
| ubuntu      | noble              | main        | amd64, arm64   |
| ubuntu      | noble-mainline     | main        | amd64, arm64   |

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

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

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

Иногда невозможно передать точный ключ кэша для очистки страницы. Например, когда содержимое куки или параметры являются частью ключа. Вы можете указать частичный ключ, добавив звездочку в конце 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

См. также