2013-04-08 49 views
0

我面临的一个问题是,在特定情况下,清漆未发送中介代理IP或公共IP。 方案是如下:Varnish从X-Forwarded中删除公共IP地址为

  • 一些酒店/公司Squid代理配置和互联网的所有流量通过鱿鱼路由。

  • 用户首先访问我公司的网站点击率的负载平衡器然后涂漆&然后阿帕奇

  • 的Apache配置有mod_geoip。我网站上的代码根据IP地址进行国家重定向。

问题:

  • 当一个用户(即squid代理后面)访问我公司的背后负载平衡器的网站 - >清漆 - >阿帕奇 - 这里阿帕奇只得到内部IP(他的私人IP)&负载Balancer内部IP作为X-forwarded-for,因此基于IP的重定向失败!

在Apache日志(配置为登录X - 转发,IP)我看到的用户私网IP &然后我的负载均衡专用IP。

172.10.5.10,LoadBalancerIP - - [......]

  • 当访问其他网站不具备光油相同的用户,点击负载均衡 - >阿帕奇 - 这里阿帕奇得到用户私有IP &用户公共IP作为X前转和基于IP的国家重定向工作正常。

在Apache日志中(配置为记录X-Forwarded-IP)我看到用户私有IP,然后他的公有IP也被记录下来。

172.10.5.10,PublicIP - - [.......]

我的清漆配置是如下。

 if (req.restarts == 0) { 
        if (req.http.x-forwarded-for) { 
       set req.http.X-Forwarded-For = 
        req.http.X-Forwarded-For + ", " + client.ip; 
        } else { 
       set req.http.X-Forwarded-For = client.ip; 
        } 
      } 

PS:我已经Google'd各个环节我能找到的和每一个环节提供了以下光油配置

现在得到这个问题解决了,我不得不绕过清漆,现在网站的流量直接触及Apache,但我需要将Varnish从Cache和Speedy交付服务器内容中还原到服务器内容。

如果有人能指导我如何解决这个问题,将不胜感激。

谢谢!

+0

你好,我已经收集光油日志上述问题,并粘贴@ http://pastebin.ca/2353444 – KeyurM 2013-04-09 06:59:37

回答

1

上述问题已解决。信贷去Mithrandir @ Varnish IRC频道。谢谢! 下面提到的更改是解决问题所必需的。

在default.vcl添加的开始:

import std; 

下面的“如果(req.http。X-转换)“补充:

std.collect(req.http.x-forwarded-for); 
  • 可做清漆configtest &重装这应该会显示公共IP

  • 下面是从vmod_std的文档的解释:

收集

Prototype 
      collect(HEADER header) 

    Return value 
      Void 

    Description 
      Collapses the header, joining the headers into one. 

    Example 
      std.collect(req.http.cookie); This will collapse several Cookie: 
      headers into one, long cookie header.