Varnish: Make cache dependent on X-Forwarded-Proto https

匿名 (未验证) 提交于 2019-12-03 09:02:45

问题:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!