使用Varnish更改标题中的Referrer

时间:2013-02-15 13:35:50

标签: caching centos varnish varnish-vcl

我认为这是清漆的可能性,你可以在其用户的标题中更改引用者,然后从缓存或服务器向他们提供内容。我想知道如何才能实现这一目标。

我用" req.http.referer"然后"设置req.http.referer"在Centos 32位机器上的清漆2.1中但是当我使用命令" varnishtop -i TxHeader -I Referer"检查结果时它没有工作。

任何人都有比这更好的想法吗?

1 个答案:

答案 0 :(得分:3)

至少在Varnish 3.0上,以下按预期工作。显然,如果响应是从缓存提供的,并且您没有将req.http.Referer用于hash(),那么更改引用标头的方式并不重要。

# Modify Referer header
sub vcl_recv {
  if (req.http.Referer) {
     # Referer was set. Replace foo with bar
     set req.http.Referer = regsub(req.http.Referer,"foo","bar");
  } else {
     # Referer was not set. Set it to something anyway.
     set req.http.Referer = "http://referer.was.empty/";
  }
}

另请注意,varnishtop -i TxHeader -I Referer区分大小写。如果您set req.http.referer,那么它将与-I Referer不匹配,即使您的HTTP后端也会理解referer:标头(根据RFC 2612 4.2消息标头不区分大小写)。