2013-12-23 34 views
2

以下情况: 在服务器是Apache和光油缓存。 SSL由亚马逊负载均衡器处理。 如果使用HTTPS请求页面,HTTP头“X-转发 - 协议”设置为“https”。 这些页面有时是不同的(例如,使用安全连接时必须使用https获取链接/图像)光油:使缓存依赖于X-转发 - 协议HTTPS

如果X-Forwarded-Proto标头不同,我该如何判断页面是否不同? 因为它是现在,无论是第一次访问缓存,并担任HTTP和HTTPS!

回答

3

你想要什么,我想,是有相同的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

+0

非常感谢!很棒! – Josef

0
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; 
    } 
} 

对不起,我已经更新了代码。这就是我的意思。

+0

感谢,但我不希望给所有用户重定向到https!我只是想让清漆为http和https提供不同的页面,不一样! – Josef

+0

上面这个是在Varnish Page中出现的例子。但它表明你在哪里以及如何处理基础上的“X - 转发,原” 那就需要内使用合适的值的请求的if-else – XaviMuste

+0

不错,但我不知道如何/如果我可以告诉清漆来缓存页面,但与anoter键。我只是看到如何缓存它或不! – Josef