我的应用程序正在根据用户国家代码更改内容。请查看服务器请求流程图。
https 请求 -> nginx 处理 ssl 终止 -> varnish -> 如果没有缓存,则从 apache 获取内容
http 请求 -> varnish -> 重定向到 https 链接 -> nginx 处理 ssl 终止 -> varnish -> 如果没有缓存,则从 apache 获取内容
使用 varnish GeoIP 模块我找到了用户国家代码并将值设置为标头,req.http.X-Country-Code
我在应用程序中读取了此标头值。
问题:它始终缓存第一个命中并服务于所有位置
我希望添加不同的标头可以解决我的问题,您能指导我吗?
我不确定在哪里添加不同的标头 nginx 或 apache。
答案1
解决方案 1 ) https://varnish-cache.org/docs/5.1/users-guide/vcl-hashing.html
解决方案 2 )添加 header variations
变化标头必须由源生成,因为只有源知道哪些页面将会改变。
https://varnish-cache.org/docs/5.1/users-guide/increasing-your-hitrate.html?highlight=vary#http-vary
如果你不能添加标题在原点,你可以修改后端响应添加 Vary 标头
一些文档:
https://varnish-cache.org/docs/5.1/reference/states.html#reference-states https://varnish-cache.org/docs/5.1/users-guide/vcl-built-in-subs.html