疑难点拨 | AWS 负载均衡器与 X-Forwarded-For


  官方指导

X-Forwarded-For(XFF)请求标头是一个事实上的 http 标头,用于标识通过代理服务器连接到 web 服务器的客户端的原始 IP 地址。

当客户端直接连接到服务器时,其 IP 地址被发送给服务器(并且经常被记录在服务器的访问日志中)。但是如果客户端通过正向或反向代理服务器进行连接,服务器就只能看到最后一个代理服务器的 IP 地址,这个 IP 通常没什么用。

如果最后一个代理服务器是与服务器安装在同一台主机上的负载均衡服务器,则更是如此。X-Forwarded-For 的出现,就是为了向服务器提供更有用的客户端 IP 地址,X-Forwarded-For 的语法格式为:
X-Forwarded-For: <client>, <proxy1>, <proxy2>

  比较分析

HTTP请求和HTTP响应使用标头字段来发送有关HTTP消息的信息。AWS 中的适用于应用程序负载均衡器(Application Load Balancers)和适用于 Classic 负载均衡器(Classic Load Balancers),都支持http协议,在使用HTTP或HTTPS负载均衡器时,可以帮助识别客户端的 IP 地址。

通常情况下,负载均衡器会拦截客户端和服务器之间的流量,因此服务器访问日志中将仅含有负载均衡器的 IP 地址。入股需要查看客户端的 IP 地址,那么就需要使用 X-Forwarded-For 请求标头。Elastic Load Balancing 会在 X-Forwarded-For 请求标头中存储客户端的 IP 地址,并将标头传递到后端的服务器。

  备考要点

只要同时涉及到负载均衡器和识别客户端的 IP 地址的需求,那么就要想到应用程序负载均衡器(Application Load Balancers)和 Classic 负载均衡器(Classic Load Balancers),以及X-Forwarded-For 请求标头。