为什么清漆默认配置将 IP 附加到 x-forwarded-for
Why does varnish default config appends the IP to x-forwarded-for
附加以逗号分隔的 ip 是否有充分的理由,或者以下是否有效?
if (req.restarts == 0) {
if (!req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = client.ip;
}
}
之所以这样做,大概是RFC7239
The "for" parameter is used to disclose information about the client
that initiated the request and subsequent proxies in a chain of
proxies.
像 squid 这样的客户端代理也可以将原始 IP 添加到 X-Forwarded-For header,所以如果你这样做并且请求已经设置了 header,varnish不会将它认为 client.ip 的内容添加为 header 字段的一部分。
更新:
“真实 IP”将只是 header 的唯一值,如果客户端还没有提供的话——但像 squid 这样的代理就是这样做的。如果您总是 想要客户端的 IP(这可能是不透明代理的 IP - 因此创建 XFF header)作为唯一值,请忽略 if (!req.http.x-forwarded-for)
条件。
但我真的会单独使用 XFF header 并在后端使用自定义 header 字段,特别是如果您打算将其用于资源访问控制,这是固有的无论如何使用 XFF header 是不安全的事情。
另请注意,可以使用 setRequestHeader() 方法在 javascript 中设置 HTTP headers。
了解您的推荐目标是什么会很有用。
附加以逗号分隔的 ip 是否有充分的理由,或者以下是否有效?
if (req.restarts == 0) {
if (!req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = client.ip;
}
}
之所以这样做,大概是RFC7239
The "for" parameter is used to disclose information about the client that initiated the request and subsequent proxies in a chain of proxies.
像 squid 这样的客户端代理也可以将原始 IP 添加到 X-Forwarded-For header,所以如果你这样做并且请求已经设置了 header,varnish不会将它认为 client.ip 的内容添加为 header 字段的一部分。
更新:
“真实 IP”将只是 header 的唯一值,如果客户端还没有提供的话——但像 squid 这样的代理就是这样做的。如果您总是 想要客户端的 IP(这可能是不透明代理的 IP - 因此创建 XFF header)作为唯一值,请忽略 if (!req.http.x-forwarded-for)
条件。
但我真的会单独使用 XFF header 并在后端使用自定义 header 字段,特别是如果您打算将其用于资源访问控制,这是固有的无论如何使用 XFF header 是不安全的事情。
另请注意,可以使用 setRequestHeader() 方法在 javascript 中设置 HTTP headers。
了解您的推荐目标是什么会很有用。