可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
following situation: On the server is a apache and Varnish for caching. SSL is handled by an amazon load balancer. If the page is requested using https, the http header "X-Forwarded-Proto" is set to "https". The pages are sometimes different (e.g. links/images have to be fetched using https when using a secure connection)
How can I tell varnish that pages are different if the X-Forwarded-Proto header differs? As it is now, whatever is accessed first is cached and served for http and https!
回答1:
What you want, I presume, is to have different cached versions of the same URI, that's pretty easy using a custom 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); } # ... }
In this example static files are only cached once and the rest (html, js, css..) are cached in 2 different versions (assuming X-Forwarded-Proto only takes two values).
You can see the example in a broader context on https://github.com/NITEMAN/varnish-bites/blob/master/varnish3/drupal-base.vcl
回答2:
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; } }
Sorry, I have updated the code now. This is what I meant.