Varnish X-Forward-IP

Varnish X-Forward-IP

我目前有以下配置设置:

负载均衡器到 Varnish 缓存(x2 服务器)到 Web 节点(x3 服务器)(Apache、PHP)

我目前已在 Varnish 中设置req.http.X-Forwarded-For = client.ip,它应该将 IP 地址传递给 Apache 节点。Apache 节点还运行 mod_rpaf,它应该可以帮助服务器使用 X-Forward-IP 而不是 Varnish 缓存 IP。

这部分对我来说没问题,但我遇到了另一个问题。目前,只有负载均衡器接收请求并要求 Varnish 缓存页面。这意味着 Apache 只记录负载均衡器的 IP 地址。但是,负载均衡器还会在请求中向 Varnish 发送 X-Forwarded-For 标头。我该如何将此标头传递给 Apache 服务器?

答案1

如果您只是对“真实”客户端 IP 感兴趣,那么请将req.http.X-Forwarded-For = client.ip设置从 Varnish 中完全取出。

然后 Varnish 将不再与标头进行交互 - 它应该将负载均衡器设置的标头传递给 Apache,从而允许 Apache 查看并记录“真实”客户端 IP。

答案2

运行nginx -V并确保你有--with-http_realip_module

如果是这样,请将以下内容添加到您的/etc/nginx/nginx.confHTTP 头部分

set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;

完成后service nginx restart(或/etc/init.d/nginx restart

这已在 varnish 3.0.4 上进行了测试并且 100% 有效。

******:varnishd -V
varnishd (varnish-3.0.4 revision 9f83e8f)

答案3

所选答案并不完全正确(至少对于 Varnish 3、AWS 上的 apache,您需要像这样放置 varnish 设置:

sub vcl_recv {

  set req.backend = dsbalancer;

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

然后在 httpd.conf LogFormat 中添加一个指令来记录它。

相关内容