Nginx 1.12中proxy_cache_key匹配$uri特定部分的缓存配置问题
解决Nginx 1.12中匹配URI特定部分实现缓存复用的方案
我来帮你搞定这个缓存复用的问题!从你给出的请求日志能看出来,这些URI里的media_w<随机数字串>_<固定ID>.ts其实指向的是相同内容,核心需求就是让这些请求共享同一个缓存条目,不用重复拉取后端资源。
完整配置示例
# 先配置缓存存储基础路径(如果还没设置的话) proxy_cache_path /var/cache/nginx/bein1 levels=1:2 keys_zone=bein1_cache:10m max_size=10g inactive=24h use_temp_path=off; server { # 你的其他server配置(比如监听端口、域名等)... location ~ ^/bein1/(\d+)/media_w[^_]+_(\d+)\.ts$ { # 启用指定的缓存区域 proxy_cache bein1_cache; # 关键:自定义缓存键,忽略随机数字串,只保留内容标识部分 proxy_cache_key "/bein1/$1/media_$2.ts"; # 缓存有效期,按你的需求调整 proxy_cache_valid 200 302 60s; # 后端代理的基础配置,替换成你的实际后端地址 proxy_pass http://your_backend_service; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
配置细节解释
正则location匹配:
~ ^/bein1/(\d+)/media_w[^_]+_(\d+)\.ts$这个正则做了两个关键捕获:- 第一个
(\d+):匹配/bein1/后的层级数字(比如日志里的1) - 第二个
(\d+):匹配最后下划线后的固定内容ID(比如日志里的2333) [^_]+:专门用来匹配中间的随机数字串,不管它是什么内容,都会被忽略
- 第一个
proxy_cache_key设置:
proxy_cache_key "/bein1/$1/media_$2.ts";这一步是核心,它把不同请求的URI统一转换成固定格式的缓存键。比如不管请求是/bein1/1/media_w1751476191_2333.ts还是/bein1/1/media_w2137194067_2333.ts,最终生成的缓存键都是/bein1/1/media_2333.ts,这样它们就会命中同一个缓存条目。缓存路径配置:
proxy_cache_path是Nginx缓存的基础配置,用来指定缓存文件的存储位置、内存缓存区大小、最大磁盘容量等,你可以根据自己服务器的资源情况调整参数。
验证生效方法
配置完成后,重新加载Nginx使配置生效:
nginx -s reload
之后再观察请求日志,相同固定ID的后续请求应该会从MISS变为HIT,这就说明缓存复用已经正常工作了。
内容的提问来源于stack exchange,提问作者Areeb111
相关产品推荐
相关产品推荐

