为什么varnish default config将IP附加到x-forwarded-for

时间:2016-02-29 14:56:07

标签: nginx varnish varnish-vcl

是否有充分的理由以逗号分隔ips或将以下工作?

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

1 个答案:

答案 0 :(得分:1)

这样做的原因可能是RFC7239

  

“for”参数用于公开有关客户端的信息      在一个链中启动了请求和后续代理      代理。

像squid这样的客户端代理也可以将原始IP添加到X-Forwarded-For标头中,所以如果你这样做并且请求已经设置了标头,那么varnish就不会添加它认为是client.ip的东西。作为标题字段的一部分。

更新

“真实IP”只会是标题的唯一值,如果客户端还没有提供 - 但像squid这样的代理就是这样做的。如果您始终希望客户端的IP(可能是不透明代理的IP - 因此创建XFF标头)作为唯一值,请忽略if (!req.http.x-forwarded-for)条件。

但我真的会单独留下XFF标头,并在后端使用自定义标头字段,特别是如果你打算用它进行资源访问控制,这是使用XFF标头的固有不安全的事情。

请注意,可以使用setRequestHeader()方法在javascript中设置HTTP标头。

了解您的推荐目标是有用的。