我有一台负载均衡器和两台服务器。我想在我的apache中添加X-Forwarded-For,以便我可以看到请求的IP,而不是看到每个请求的负载均衡器IP。我该怎么做?我查了一下,X-Forwarded-For: client, proxy1, proxy2
看起来像一个解决方案。客户端是负载均衡器IP,proxy1是Server 1的IP,proxy2是Server 2的IP吗?
答案 0 :(得分:6)
我假设您已经引用了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的负载均衡器。您在其中一台服务器上运行的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(s) - 在这种情况下,203.0.113.1
。如果客户端位于同时报告X-Forwarded-For
的其他代理后面,那么将是一个以逗号分隔的列表 - 最左边的地址与服务器“最接近” - IE,负载均衡器收到的地址请求来自。