我遇到了这个问题,无法找到我网站的唯一身份访问者。该站点部署在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
答案 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