【问题标题】:getting client IP addresses in apache log when server behind varnish reverse proxy which inturn is behind load balancer当服务器位于 varnish 反向代理后面(又位于负载均衡器后面)时,在 apache 日志中获取客户端 IP 地址
【发布时间】:2013-03-10 23:02:51
【问题描述】:

我在寻找我网站的唯一身份访问者时遇到了这个问题。该站点部署在 AWS 云上。第一个命中是负载均衡器,它路由到清漆缓存(反向代理的类型),然后路由到 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 日志/access_log varnishcombined

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

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

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

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

有人遇到过这种情况吗?

曼格什

【问题讨论】:

    标签: proxy unique load-balancing varnish visitors


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      曼格什

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-06
        相关资源
        最近更新 更多