跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何配置 proxy_cache_methods 开启针对自定义请求方式的高性能静态加速方案

Nginx 不支持直接缓存 PURGE 等自定义方法,需通过 GET 请求携带参数(如 _action=purge)映射语义,并用 proxy_cache_bypass 和 proxy_no_cache 控制缓存行为,配合 proxy_cache_key 多维区分与鉴权 purge,实现安全高效缓存管理。 Nginx 默认只缓存
GET
和
HEAD
请求,不缓存
POST
、
PUT
、
DELETE
等方法。若需对自定义请求方式(如
PURGE
、
BYPASS
、
CACHE-REFRESH
)启用缓存加速, 不能直接让这些方法参与缓存存储 ——因为
proxy_cache_methods
仅支持标准 HTTP 方法,且 Nginx 内部逻辑限制其值必须为
GET
、
HEAD
、
POST
(仅限部分版本)、
PURGE
不被原生支持。 但可通过“语义映射”实现等效效果:把自定义请求头或路径特征,映射为可缓存的
GET
行为,并配合
proxy_cache_bypass
和
proxy_no_cache
精准控制缓存生命周期。这才是真正可行的高性能静态加速方案。 proxy _cache_methods 的合法取值与边界 支持的方法仅限:
GET
、
HEAD
、
POST
(需显式配置,且 POST 缓存有严格前提)
POST
缓存需同时满足:
proxy_cache_methods POST;
proxy_cache_key
中必须包含请求体哈希(如
$request_body
),否则所有 POST 请求共用同一 key,极易脏缓存 后端必须幂等,且响应带明确
Cache-Control
或
Expires
PURGE
、
OPTIONS
、
CUSTOM-VERB
等 无法写入
proxy_cache_methods
,Nginx 启动时会报错或静默忽略 用 GET 语义承载自定义动作(推荐实践) 将“刷新缓存”“预热缓存”“降级访问”等操作,转为带特定参数的
GET
请求,例如:
GET /api/item/123?_action=purge
GET /static/logo.png?_v=20260502
GET /feed.json?_bypass=1
然后在 location 中用变量提取意图,控制缓存行为:
location ~ \.json$ { # 提取业务动作标识 set $cache_action ""; if ($args ~ "_action=([a-z]+)") { set $cache_action $1; } if ($args ~ "_bypass=1") { set $cache_action "bypass"; } # 不缓存 purge / bypass 类请求 proxy_no_cache $cache_action; proxy_cache_bypass $cache_action; # 仅当 $cache_action 为空时才走缓存 proxy_cache my_cache; proxy_cache_valid 200 5m; }
✅ 这样既绕过
proxy_cache_methods
的语法限制,又保持了请求语义清晰、CDN 兼容、浏览器可调试。 配合 proxy_cache_key 实现多维度命中 若需按用户角色、设备类型、灰度标签等区分缓存,应在
proxy_cache_key
中加入对应变量:
proxy_cache_key "$scheme$request_method$host$uri$is_args$args:$cookie_user_role:$http_x_device_type";
注意:
$cookie_*
和
$http_*
变量需确保存在,否则 key 中出现空字符串会导致误共享;建议搭配
map
指令做兜底:
map $cookie_user_role $cache_role { "" "guest"; default $cookie_user_role; }
安全与清理机制不可省略 自定义动作(如 purge)必须鉴权,防止恶意刷空缓存:
location = /purge { allow 127.0.0.1; allow 10.0.0.0/8; deny all; proxy_cache_purge my_cache "$scheme$request_method$host$uri$is_args$args"; }
使用
proxy_cache_purge
模块(需编译时启用
--add-module=ngx_cache_purge
)才能真正删除缓存项。 不复杂但容易忽略

相关文章