You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:42:16