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

如何在Shopware 6中为HttpCache添加额外缓存状态?

如何基于Cloudflare国家头和自定义Cookie区分HttpCache缓存状态

要让HttpCache根据cf-ipcountry请求头和example-cookie Cookie区分缓存状态,核心是将这两个参数纳入缓存键(Cache Key)的生成逻辑,同时通过Vary头告知缓存服务器需依据这些字段区分缓存实例。以下是主流Web服务器及Cloudflare场景下的具体实现方案:

Nginx 实现

1. 自定义缓存键

修改Nginx配置,在反向代理或静态缓存块中,将cf-ipcountry和example-cookie添加到缓存键中,同时处理字段缺失的情况避免缓存异常:

location / {
    proxy_pass http://backend;
    proxy_cache my_cache;

    # 为缺失字段设置默认值
    set $cf_country $http_cf_ipcountry;
    if ($cf_country = "") {
        set $cf_country "unknown";
    }
    set $example_cookie $cookie_example_cookie;
    if ($example_cookie = "") {
        set $example_cookie "none";
    }

    # 缓存键包含协议、请求方法、域名、URI、国家头、目标Cookie
    proxy_cache_key "$scheme$request_method$host$request_uri$cf_country$example_cookie";
}

2. 设置Vary头

添加Vary头,让下游缓存(浏览器、CDN)知晓需根据指定字段区分缓存:

add_header Vary "CF-IPCountry, Cookie";

若仅需基于example-cookie而非全部Cookie,可通过map模块提取特定值并生成自定义头,再加入Vary:

map $http_cookie $example_cookie_val {
    ~*example-cookie=([^;]+) $1;
    default "none";
}

add_header Vary "CF-IPCountry, X-Example-Cookie";
proxy_set_header X-Example-Cookie $example_cookie_val;

Apache 实现

1. 配置缓存键包含目标字段

启用mod_cache和mod_cache_socache模块后,通过CacheKeyInclude指令将指定字段纳入缓存键:

# 全局或虚拟主机配置
CacheEnable disk /
# 包含Cloudflare国家头
CacheKeyInclude "cf-ipcountry"
# 包含指定Cookie
CacheKeyInclude "cookie:example-cookie"

2. 设置Vary头

通过Header指令添加Vary头:

Header set Vary "CF-IPCountry, Cookie"

若需精确到example-cookie,可借助mod_rewrite提取Cookie值并设置自定义头:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} example-cookie=([^;]+)
RewriteRule ^ - [E=EXAMPLE_COOKIE:%1]
Header set Vary "CF-IPCountry, X-Example-Cookie"
Header set X-Example-Cookie "%{EXAMPLE_COOKIE}e" env=EXAMPLE_COOKIE

Cloudflare CDN缓存场景

若使用Cloudflare作为前端CDN,需在控制台配置缓存键规则:

  1. 进入规则 > 页面规则,创建匹配目标URL的新规则
  2. 添加缓存键完整性设置:
    • 勾选「包括指定的请求头」,添加CF-IPCountry
    • 勾选「包括指定的Cookie」,添加example-cookie
  3. 确保Cloudflare缓存行为中保留Vary头(默认生效)

注意事项

  • 字段缺失处理:非Cloudflare流量会缺失cf-ipcountry,未携带example-cookie的请求需设置默认值,避免缓存键为空导致混乱。
  • 缓存粒度平衡:纳入更多字段会增加缓存实例数量,可能降低命中率,需根据业务需求调整。
  • 验证方法:用curl发送不同参数的请求,通过X-Cache或X-Cache-Status响应头确认缓存是否按预期区分。

内容的提问来源于stack exchange,提问作者newgennerd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:23