Nginx FastCGI缓存需通过fastcgi_cache_purge模块实现按需精准清理:先确认模块已编译启用,再配置一致的cache_key与purge规则,最后由应用触发PURGE请求清除指定URI缓存。

要让 Nginx FastCGI 缓存支持按需清理、避免内容 stale,不能只靠删目录或重启——得建立可触发、可定位、可控制的清理机制。核心是两件事:一是配置好缓存键与缓存区,二是引入 fastcgi_cache_purge 模块实现精准清除。
确认并启用 fastcgi_cache_purge 模块
Nginx 官方不自带 purge 功能,需确保编译时已加入 ngx_http_fastcgi_cache_purge_module(常见于 OpenResty 或第三方预编译包)。验证方式:
- 运行
nginx -V 2>&1 | grep -o with-http-fastcgi-cache-purge-module,有输出即支持 - 若无,需重新编译 Nginx 或改用支持该模块的发行版(如 Ubuntu 的
nginx-extras包)
配置缓存区与清理入口 location
在 http 块中定义缓存路径,并在 server 块中添加 purge 接口:
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=my_fcgi:10m inactive=30m max_size=500m;- 在 server 内添加:
location ~ ^/purge(/.*) {
allow 127.0.0.1;
allow 192.168.0.0/16; # 仅允许可信网段
deny all;
fastcgi_cache_purge my_fcgi "$scheme$request_method$host$1";
}注意:$1 对应 /purge/xxx 中的 xxx,它会参与生成缓存 key,从而精准匹配要删的条目。
确保缓存 key 可被 purge 正确识别
清理能否成功,取决于 fastcgi_cache_key 和 fastcgi_cache_purge 中的 key 表达式是否一致。推荐统一写法:
- 缓存时用:
fastcgi_cache_key "$scheme$request_method$host$request_uri"; - 清理时对应:
fastcgi_cache_purge my_fcgi "$scheme$request_method$host$1"; - 这样访问
curl -X PURGE http://example.com/purge/abc.php就能清除GET http://example.com/abc.php的缓存
配合业务做主动清理
内容更新后,由应用层自动触发 purge 请求,例如 PHP 更新文章后执行:
file_get_contents("http://127.0.0.1/purge/article-123.html");- 或用 curl:
curl -X PURGE "http://localhost/purge/$uri" - 也可批量清理目录级缓存(如
/purge/blog/),前提是缓存 key 中包含路径前缀且 purge 配置支持通配逻辑


















