当varnish reverse proxy后面的服务器位于负载平衡器后面时,在apache日志中获取客户端IP地址

当varnish reverse proxy后面的服务器位于负载平衡器后面时,在apache日志中获取客户端IP地址,proxy,unique,load-balancing,varnish,visitors,Proxy,Unique,Load Balancing,Varnish,Visitors,我有这个问题,以寻找独特的访客到我的网站。该站点部署在AWS云上。第一个问题是负载平衡器,它路由到varnish缓存(反向代理类型),而inturn路由到ApacheWeb服务器。我的apache conf文件中有以下配置: 日志格式“%{X-Forwarded-For}i%l%u%t\%r\”%>s%b\“%{Referer}i\”\“%{User Agent}i\”\“%{法医id}n\\”组合 自定义日志/访问日志 在我的清漆文件中,我有以下内容: 子vcl_recv{ unset req

我有这个问题,以寻找独特的访客到我的网站。该站点部署在AWS云上。第一个问题是负载平衡器,它路由到varnish缓存(反向代理类型),而inturn路由到ApacheWeb服务器。我的apache conf文件中有以下配置:

日志格式“%{X-Forwarded-For}i%l%u%t\%r\”%>s%b\“%{Referer}i\”\“%{User Agent}i\”\“%{法医id}n\\”组合

自定义日志/访问日志

在我的清漆文件中,我有以下内容: 子vcl_recv{

unset req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
当我检查访问日志时,我看到所有请求都具有负载平衡器IP,而不是来自请求的客户端的实际IP。nfact它是aws负载平衡器的IP

如果我删除了varnish或负载平衡器中的任何一个,那么我的访问日志中就有捕获客户端IP地址的正确条目

有人遇到过这种情况吗


Manguesh

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

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

最初我只使用varnish和apache作为后端,因为上面的几行是传播客户端ip所必需的。但是,随着varnish proxy上面添加了负载平衡器,相同的几行修剪了客户端ip传播的http头,并将负载平衡器ip设置为客户端


Manguesh

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