#cache #nginx #purge #clear #delete

bin+lib nginx-cache-purge

为 Nginx 提供另一种执行 proxy_cache_purgefastcgi_cache_purge 的方法

19 个版本

0.4.4 2023 年 11 月 27 日
0.3.2 2023 年 11 月 11 日
0.1.9 2022 年 3 月 18 日
0.1.8 2021 年 4 月 21 日
0.1.6 2020 年 7 月 28 日

#65HTTP 服务器

Download history

每月 143 次下载

MIT 许可证

37KB
719

Nginx 缓存清理

CI

为 Nginx 提供 proxy_cache_purgefastcgi_cache_purge 的另一种实现。

用法

安装/卸载

crates.io

cargo install nginx-cache-purge

# cargo uninstall nginx-cache-purge

从 GitHub (Linux x86_64),

curl -fL "$(curl -fsS https://api.github.com/repos/magiclen/nginx-cache-purge/releases/latest | sed -r -n 's/.*"browser_download_url": *"(.*\/nginx-cache-purge_'$(uname -m)')".*/\1/p')" -O && sudo mv nginx-cache-purge_$(uname -m) /usr/local/bin/nginx-cache-purge && sudo chmod +x /usr/local/bin/nginx-cache-purge

# sudo rm /usr/local/bin/nginx-cache-purge

CLI 帮助

EXAMPLES:
nginx-cache-purge p /path/to/cache 1:2 http/blog/             # Purge the cache with the key "http/blog/" in the "cache zone" whose "path" is /path/to/cache, "levels" is 1:2
nginx-cache-purge p /path/to/cache 1:1:1 'http/blog*'         # Purge the caches with the key which has "http/blog" as its prefix in the "cache zone" whose "path" is /path/to/cache, "levels" is 1:1:1
nginx-cache-purge p /path/to/cache 2:1 '*/help*'              # Purge the caches with the key which contains the substring "/help" in the "cache zone" whose "path" is /path/to/cache, "levels" is 2:1
nginx-cache-purge p /path/to/cache 1 '*'                      # Purge all caches in the "cache zone" whose "path" is /path/to/cache, "levels" is 1
nginx-cache-purge p /path/to/cache 2 '*' -e 'http/static/*'   # Purge all caches except for those whose key starts with "http/static/" in the "cache zone" whose "path" is /path/to/cache, "levels" is 2
nginx-cache-purge s                                           # Start a server which listens on "/tmp/nginx-cache-purge.sock" to handle purge requests
nginx-cache-purge s /run/nginx-cache-purge.sock               # Start a server which listens on "/run/nginx-cache-purge.sock" to handle purge requests

Usage: nginx-cache-purge <COMMAND>

Commands:
  purge  Purge the cache immediately [aliases: p]
  start  Start a server to handle purge requests [aliases: s]
  help   Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

如果 purge 命令成功删除了任何缓存,它将返回退出状态 0。如果不需要删除任何缓存,它将返回退出状态 44

Nginx + Nginx 缓存清理

启动 Nginx 缓存清理服务(例如 systemd)

假设我们已经将可执行文件 nginx-cache-purge 放在了 /usr/local/bin/

/etc/systemd/system/nginx-cache-purge.service

[Unit]
Description=Nginx Cache Purge
After=network.target
 
[Service]
# same as the user/group of the nginx process
User=www-data
Group=www-data

ExecStart=/usr/local/bin/nginx-cache-purge start
Restart=always
RestartSec=3s
 
[Install]
WantedBy=multi-user.target

运行以下命令:

sudo systemctl daemon-reload
sudo systemctl start nginx-cache-purge
sudo systemctl status nginx-cache-purge

sudo systemctl enable nginx-cache-purge

编辑 Nginx 的配置文件

假设我们希望将缓存放在 /tmp/cache

http {
    ...

    map $request_method $is_purge {                                                             
        default   0;
        PURGE     1;
    }

    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m;
    proxy_cache_key $scheme$request_uri;

    server {
        ...

        location / {
            if ($is_purge) {
                set $my_cache_key $scheme$request_uri;
            
                proxy_pass http://unix:/tmp/nginx-cache-purge.sock;
                
                rewrite ^ /?cache_path=/tmp/cache&levels=1:2&key=$my_cache_key break;
            }

            proxy_cache my_cache;
            proxy_pass upstream;
            include proxy_params;
        }
    }
}

请记住添加您的访问认证机制,以防止陌生人清除您的缓存。请注意,缓存键不应包含 $proxy_host,因为当请求在 proxy_pass http://unix:... 时,它将是空的。

完成设置后

  • 请求 PURGE /path/to/abc 以清除来自 GET /path/to/abc 的缓存。
  • 请求 PURGE /path/to/* 以清除从 GET /path/to/**/* 的所有缓存。
  • 请求 PURGE /path/to/*/foo/*/bar 以清除 GET /path/to/**/foo/**/bar 的缓存。

如果服务成功移除任何缓存,它将返回 HTTP 状态码 200。如果没有缓存需要移除,它将返回 HTTP 状态码 202

可以设置到 / 端点 URL 的其他字段

  • remove_first:允许从 key 的请求路径中排除前缀。格式应为 ?remove_first=/purge
  • exclude_keys(可以有一个以上):排除这些键从清除过程中。它还支持使用通配符。格式应为 ?exclude_keys=http/static/*&exclude_keys=http/1remove_first 字段不会影响 exclude_keys 字段。

无服务

如果我们想使用 nginx-cache-purge CLI 与 lua-nginx-module,而不是在后台运行服务。

我们可以选择禁用默认功能以获得更小的可执行二进制文件。

cargo install nginx-cache-purge --no-default-features

许可证

MIT

依赖关系

~6–18MB
~244K SLoC