以下情况: 在服务器是Apache和光油缓存。 SSL由亚马逊负载均衡器处理。 如果使用HTTPS请求页面,HTTP头“X-转发 - 协议”设置为“https”。 这些页面有时是不同的(例如,使用安全连接时必须使用https获取链接/图像)光油:使缓存依赖于X-转发 - 协议HTTPS
如果X-Forwarded-Proto标头不同,我该如何判断页面是否不同? 因为它是现在,无论是第一次访问缓存,并担任HTTP和HTTPS!
以下情况: 在服务器是Apache和光油缓存。 SSL由亚马逊负载均衡器处理。 如果使用HTTPS请求页面,HTTP头“X-转发 - 协议”设置为“https”。 这些页面有时是不同的(例如,使用安全连接时必须使用https获取链接/图像)光油:使缓存依赖于X-转发 - 协议HTTPS
如果X-Forwarded-Proto标头不同,我该如何判断页面是否不同? 因为它是现在,无论是第一次访问缓存,并担任HTTP和HTTPS!
你想要什么,我想,是有相同的URI的不同缓存版本,即使用自定义vcl_hash
是很容易:
sub vcl_hash {
# ...
if (req.http.X-Forwarded-Proto &&
req.url !~ "(?i)\.(png|gif|jpeg|jpg|ico|gz|tgz|bz2|tbz|mp3|ogg|zip|rar|otf|ttf|eot|woff|svg|pdf)$") {
hash_data(req.http.X-Forwarded-Proto);
}
# ...
}
在这个例子中的静态文件只缓存一次,其余( html,js,css ..)被缓存在两个不同的版本中(假设X-Forwarded-Proto只有两个值)。
你可以看到例如在更广阔的背景上https://github.com/NITEMAN/varnish-bites/blob/master/varnish3/drupal-base.vcl
sub vcl_recv {
if (req.http.X-Forwarded-Proto !~ "(?i)https") {
set req.http.x-Redir-Url = "http://" + ...req url;
}else{
set req.http.x-Redir-Url = "https://" + ...req url;
}
}
对不起,我已经更新了代码。这就是我的意思。
非常感谢!很棒! – Josef