HTTP 标头和 Application Load Balancer - 弹性负载均衡
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

HTTP 标头和 Application Load Balancer

HTTP 请求和 HTTP 响应使用标头字段发送有关 HTTP 消息的信息。HTTP 标头会自动添加。标头字段为冒号分隔的名称值对,各个值对之间由回车符 (CR) 和换行符 (LF) 进行分隔。RFC 2616 信息标头中定义了标准 HTTP 标头字段集。此外还有应用程序广泛使用和自动添加的非标准 HTTP 标头。某些非标准 HTTP 标头具有 X-Forwarded 前缀。Application Load Balancer 支持以下 X-Forwarded 标头。

有关 HTTP 连接的更多信息,请参阅 Elastic Load Balancing 用户指南中的请求路由

X-Forwarded-For

在您使用 HTTP 或 HTTPS 负载均衡器时,X-Forwarded-For 请求标头可帮助您识别客户端的 IP 地址。由于负载均衡器会拦截客户端和服务器之间的流量,因此您的服务器访问日志中将仅包含负载均衡器的 IP 地址。要查看客户端的 IP 地址,请使用 routing.http.xff_header_processing.mode 属性。借助此属性,您可以在应用程序负载均衡器将请求发送到目标之前修改、保留或移除 HTTP 请求中的 X-Forwarded-For 标头。此属性的可能值为 appendpreserveremove。此属性的默认值为 append

Append

默认情况下,应用程序负载均衡器会在 X-Forwarded-For 请求标头中存储客户端的 IP 地址,并将该标头传递到您的服务器。如果 X-Forwarded-For 请求标头未包含在原始请求中,则负载均衡器会创建一个以客户端 IP 地址作为请求值的标头。否则,负载均衡器会将客户端 IP 地址添加到现有标头,然后将该标头传递到您的服务器。X-Forwarded-For 请求标头可能包含多个以逗号分隔的 IP 地址。最左边的地址是首次发出请求的客户端 IP 地址。然后是某个链中的任何后续代理标识符。

X-Forwarded-For 请求标头采用以下形式:

X-Forwarded-For: client-ip-address

下面是 IP 地址为 203.0.113.7 的客户端的 X-Forwarded-For 请求标头的示例。

X-Forwarded-For: 203.0.113.7

下面是 IPv6 地址为 X-Forwarded-For 的客户端的 2001:DB8::21f:5bff:febf:ce22:8a2e 请求标头的示例。

X-Forwarded-For: 2001:DB8::21f:5bff:febf:ce22:8a2e

在负载均衡器上启用客户端端口保留属性(routing.http.xff_client_port.enabled)后,X-Forwarded-For 请求标头包括附加到 client-ip-addressclient-port-number(以冒号分隔)。然后标头采用以下形式:

IPv4 -- X-Forwarded-For: client-ip-address:client-port-number
IPv6 -- X-Forwarded-For: [client-ip-address]:client-port-number

对于 IPv6,请注意,当负载均衡器将 client-ip-address 附加到现有标头时,会将地址放在方括号内。

下面是 IPv4 地址为 12.34.56.78、端口号为 8080 的客户端的 X-Forwarded-For 请求标头示例。

X-Forwarded-For: 12.34.56.78:8080

下面是 IPv6 地址为 2001:db8:85a3:8d3:1319:8a2e:370:7348、端口号为 8080 的客户端的 X-Forwarded-For 请求标头示例。

X-Forwarded-For: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080

Preserve

属性中的 preserve 模式会确保在将 HTTP 请求发送到目标之前不会以任何方式进行修改其中的 X-Forwarded-For 标头。

删除

属性中的 remove 模式会在将 HTTP 请求发送到目标之前移除其中的 X-Forwarded-For 标头。

注意

如果您启用了客户端端口保留属性(routing.http.xff_client_port.enabled),同时还为 routing.http.xff_header_processing.mode 属性选择了 preserveremove,则应用程序负载均衡器将覆盖客户端端口保留属性。它会将 X-Forwarded-For 标头保留不变,或者根据您选择的模式将其移除,然后再将请求发送到目标。

当您选择 appendpreserve 或者 remove 模式时目标将收到的 X-Forwarded-For 标头示例见下表。在此例中,最后一跳的 IP 地址为 127.0.0.1

请求描述

示例请求

append 模式中的 XFF preserve 模式中的 XFF remove 模式中的 XFF
发送请求时没有 XFF 标头 GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.1 不存在 不存在
发送请求时包含一个 XFF 标头和一个客户端 IP 地址。 GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4 X-Forwarded-For: 127.0.0.4, 127.0.0.1 X-Forwarded-For: 127.0.0.4 不存在
发送请求时包含一个 XFF 标头和多个客户端 IP 地址。 GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4, 127.0.0.8 X-Forwarded-For: 127.0.0.4, 127.0.0.8, 127.0.0.1 X-Forwarded-For: 127.0.0.4, 127.0.0.8 不存在
使用控制台修改、保留或移除 X-Forwarded-For 标头
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Load Balancers

  3. 选择负载均衡器。

  4. Description 选项卡上,选择 Edit attributes

  5. Edit load balancer attributes(编辑负载均衡器属性)页面上,选择 Append(附加,此为默认值)、Preserve(保留)或 Remove(移除)。

  6. 选择保存

使用 Amazon CLI 修改、保留或移除 X-Forwarded-For 标头

使用带 routing.http.xff_header_processing.mode 属性的 modify-load-balancer-attributes 命令。

X-Forwarded-Proto

X-Forwarded-Proto 请求标头可帮助您识别客户端与您的负载均衡器连接时所用的协议 (HTTP 或 HTTPS)。您的服务器访问日志仅包含在服务器和负载均衡器之间使用的协议;不含任何关于在客户端和负载均衡器之间使用的协议之信息。如需判断在客户端和负载均衡器之间使用的协议,使用 X-Forwarded-Proto 请求标题。Elastic Load Balancing 会在 X-Forwarded-Proto 请求标头中存储客户端和负载均衡器之间使用的协议,并将标头传递到您的服务器。

您的应用程序或网站可以使用存储在 X-Forwarded-Proto 请求标头中的协议来呈现重新定向至适用 URL 的响应。

X-Forwarded-Proto 请求标头采用以下形式:

X-Forwarded-Proto: originatingProtocol

以下示例包含以 HTTPS 请求形式源自客户端的请求的 X-Forwarded-Proto 请求标头:

X-Forwarded-Proto: https

X-Forwarded-Port

X-Forwarded-Port 请求标头可帮助您识别客户端与您的负载均衡器连接时所用的目标端口。