Apache:如何使用负载均衡器和2台服务器编写X-Forwarded-For?

big*_*ato 2 apache networking load-balancing

我有一个负载均衡器和两台服务器.我想在我的apache中添加X-Forwarded-For,以便我可以看到请求的IP,而不是看到每个请求的负载均衡器IP.我该怎么做?我X-Forwarded-For: client, proxy1, proxy2查了一下,看起来像一个解决方案.客户端是负载均衡器IP,proxy1是Server 1的IP,proxy2是Server 2的IP吗?

zie*_*mer 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
Run Code Online (Sandbox Code Playgroud)

负载均衡器的IP(192.0.2.1)仍将显示为%h日志条目中的第一个字段(\"%{X-Forwarded-For}i\"),但最后一个字段()将包含客户端的IP(在本例中为)203.0.113.1.如果客户端位于也报告的其他代理的后面X-Forwarded-For,那么将是一个以逗号分隔的列表 - 最左边的地址与服务器"最接近" - IE,负载均衡器收到请求的IE.