我有一个负载平衡器和两台服务器。我想在我的 apache 中添加 X-Forwarded-For 以便我可以看到请求的 IP,而不是查看每个请求的负载均衡器 IP。我该怎么做?我查了一下,X-Forwarded-For: client, proxy1, proxy2
看起来像是一个解决方案。客户端是负载均衡器 IP,proxy1 是服务器 1 的 IP,proxy2 是服务器 2 的 IP?
1 回答
我假设您已经引用了http://en.wikipedia.org/wiki/X-Forwarded-For - 这很可能是您复制X-Forwarded-For: client, proxy1, proxy2
格式的地方。
我还假设您正在使用专用的负载均衡器(Apache HTTPD 以外的东西),它将流量引导到您的“服务器” - 每个服务器上都包含您的“Apache”,并且您知道如何配置负载均衡器以通过这个标题。
我认为您需要了解的缺失部分是(也来自维基百科页面):
其中值是一个逗号+空格分隔的IP地址列表,最左边的是原始客户端,每个传递请求的连续代理添加它接收请求的IP地址。在此示例中,请求通过 proxy1、proxy2 和 proxy3(未在标头中显示)。proxy3 显示为请求的远程地址。
IE,如果您的负载均衡器是给定请求通过的唯一代理(至少是唯一添加 X-Forwarded-For 标头的代理),那么标头将仅包含一个值 - 您的负载均衡器的值。
假设您正在处理来自具有 203.0.113.1 的客户端的请求,并且该请求来自 IP 为 192.0.2.1 的负载均衡器。然后,在 2 台服务器之一上运行的 Apache HTTP 实例应该会看到来自 192.0.2.1 的请求,其中: X-Forwarded-For: 203.0.113.1
。
为了在 Apache HTTPD 日志中查看此标头,您需要使用以下内容:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D \"%{Host}i\" \"%{X-Forwarded-For}i\"" custom
负载均衡器的 IP (192.0.2.1) 仍将显示为%h
日志条目中的第一个字段 ( ),但最后一个字段 ( \"%{X-Forwarded-For}i\"
) 将包含客户端的 IP - 在本例中为203.0.113.1
. 如果客户端在也报告的其他代理后面X-Forwarded-For
,那么将是一个逗号分隔的列表 - 最左边的地址是“最接近”您的服务器的地址 - IE,即您的负载均衡器收到请求的那个。