当服务器隐藏在varnish反向代理之后,在apache日志中获取客户端IP地址,其中inturn位于负载均衡器之后

时间:2013-03-21 12:25:37

标签: proxy unique load-balancing varnish visitors

我遇到了这个问题,无法找到我网站的唯一身份访问者。该站点部署在AWS云上。第一个命中去负载均衡器,它路由到varnish缓存(反向代理的类型),并且转发到apache web服务器的路由。我在apache conf文件中有以下配置:

LogFormat“%{X-Forwarded-For} i%l%u%t \”%r \“%> s%b \”%{Referer} i \“\”%{User-Agent} i \“\”%{forensic-id} n \“”varnishcombined

CustomLog logs / access_log varnishcombined

我的清漆文件中有以下内容: sub vcl_recv {

unset req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;

当我检查访问日志时,我发现所有请求都有负载均衡器IP而不是请求来自客户端的实际IP。 nfact它是aws负载均衡器的ip。

如果删除任何一个清漆或负载均衡器,我的访问日志都有正确的条目捕获客户端IP地址。

有人遇到过这种情况吗?

Manguesh

2 个答案:

答案 0 :(得分:1)

在子vcl_recv中使用此列表包含IP列表(包括您的ELB和客户端IP)

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

答案 1 :(得分:0)

好的,伙计们,所以修复很简单。我所要做的就是从我的清漆配置文件中删除以下行:

unset req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip;

最初我只有varnish和apache作为后端,因此上面的行必须传播客户端ip。但是,通过在清漆代理上方添加负载均衡器,相同的行修剪了客户端IP传播的http标头,而是将负载均衡器Ip设置为客户端。

Manguesh