【问题标题】:Why does varnish default config appends the IP to x-forwarded-for为什么清漆默认配置将IP附加到x-forwarded-for
【发布时间】:2016-03-02 17:29:28
【问题描述】:

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

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

【问题讨论】:

    标签: nginx varnish varnish-vcl


    【解决方案1】:

    之所以会这样做,大概是RFC7239

    “for”参数用于披露有关客户端的信息 启动请求和随后的代理链中的 代理。

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

    更新:

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

    但我真的会单独保留 XFF 标头并使用自定义标头字段在后端使用,特别是如果您打算将其用于资源访问控制,无论如何使用 XFF 标头都是不安全的事情。

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

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

    【讨论】:

    • 这样操作一般不会有问题,因为真正的ip总是在开头,这是一个可靠的假设吗?
    猜你喜欢
    • 2013-10-22
    • 2020-10-01
    • 1970-01-01
    • 2018-10-14
    • 2014-04-23
    • 2020-01-17
    • 2017-03-17
    • 2011-01-15
    相关资源
    最近更新 更多