本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Application Load Balancer 的侦听器
侦听器是一个使用您配置的协议和端口检查连接请求的进程。在开始使用 Application Load Balancer 之前,必须添加至少一个侦听器。如果您的负载均衡器没有侦听器,则无法接收来自客户端的流量。您为侦听器定义的规则决定了负载均衡器如何将请求路由到您注册的目标(例如EC2实例)。
内容
侦听器配置
侦听器支持以下协议和端口:
-
协议:HTTP,HTTPS
-
端口:1-65535
您可以使用HTTPS侦听器将加密和解密工作转移到您的负载均衡器,以便您的应用程序可以专注于其业务逻辑。如果监听器协议是HTTPS,则必须在监听器上部署至少一个SSL服务器证书。有关更多信息,请参阅 为您的 Applicati HTTPS on Load Balancer 创建侦听器。
如果您必须确保目标解密HTTPS流量而不是负载均衡器,则可以在端口 443 上创建带有TCP侦听器的 Network Load Balancer。借助TCP侦听器,负载均衡器无需解密即可将加密流量传递到目标。有关 Network Load Balancer 的更多信息,请参阅 Network Load Balancers 用户指南。
应用程序负载均衡器为提供原生支持。 WebSockets您可以使用连接升级将现有的 HTTP /1.1 连接升级为 WebSocket (ws
或wss
)HTTP连接。升级时,用于请求的TCP连接(与负载均衡器以及到目标的 WebSocket 连接)通过负载均衡器成为客户端与目标之间的永久连接。您可以同时 WebSockets 使用HTTP和HTTPS听众。您为监听器选择的选项适用于 WebSocket 连接和HTTP流量。有关更多信息,请参阅《Amazon CloudFront 开发者指南》中的 WebSocket 协议工作原理。
应用程序负载均衡器为带有HTTPS侦听器的 HTTP /2 提供原生支持。使用一个 HTTP /2 连接,您最多可以并行发送 128 个请求。您可以使用协议版本通过 HTTP /2 向目标发送请求。有关更多信息,请参阅 协议版本。由于 HTTP /2 使用前端连接的效率更高,因此您可能会注意到客户端与负载均衡器之间的连接较少。你不能使用 /2 的服务器推送功能。HTTP
有关更多信息,请参阅 Elastic Load Balancing 用户指南中的请求路由。
侦听器属性
以下是应用程序负载均衡器的侦听器属性
routing.http.request.x_amzn_mtls_clientcert_serial_number.header_name
-
允许您修改 X-Amzn-Mtls-Clientcert-Serial-Numb HTTP er 请求标头的标头名称。
routing.http.request.x_amzn_mtls_clientcert_issuer.header_name
-
允许您修改 X-Amzn HTTP-Mtls-Clientcert-Issuer 请求标头的标头名称。
routing.http.request.x_amzn_mtls_clientcert_subject.header_name
-
允许您修改 X-Amzn HTTP-Mtls-Clientcert-Subject-Subject请求标头的标头名称。
routing.http.request.x_amzn_mtls_clientcert_validity.header_name
-
允许您修改 X-Amzn HTTP-Mtls-Clientcert-Validity 请求标头的标头名称。
routing.http.request.x_amzn_mtls_clientcert_leaf.header_name
-
允许您修改 X-Amzn-Mtls-Clientcert-Leaf HTTP 请求标头的标头名称。
routing.http.request.x_amzn_mtls_clientcert.header_name
-
允许您修改 X-Amzn HTTP-Mtls-Clientcert 请求标头的标头名称。
routing.http.request.x_amzn_tls_version.header_name
-
允许您修改 X-Amzn HTTP-Tls-Version 请求标头的标头名称。
routing.http.request.x_amzn_tls_cipher_suite.header_name
-
允许您修改 X-Amzn HTTP-Tls-Cipher-Suite 请求标头的标头名称。
routing.http.response.server.enabled
-
允许您允许或删除HTTP响应服务器标头。
routing.http.response.strict_transport_security.header_value
-
告知浏览器,只能使用访问该网站HTTPS,而且 future 使用访问该网站的任何尝试都HTTP应自动转换为HTTPS。
routing.http.response.access_control_allow_origin.header_value
-
指定允许哪些源访问服务器。
routing.http.response.access_control_allow_methods.header_value
-
返回从其他来源访问服务器时允许使用哪些HTTP方法。
routing.http.response.access_control_allow_headers.header_value
-
指定请求期间可以使用哪些标头。
routing.http.response.access_control_allow_credentials.header_value
-
表示浏览器在发出请求时是否应包含诸如 Cookie 或身份验证之类的凭据。
routing.http.response.access_control_expose_headers.header_value
-
返回浏览器可以向请求的客户端公开哪些标头。
routing.http.response.access_control_max_age.header_value
-
指定可以将预检请求的结果缓存多长时间(以秒为单位)。
routing.http.response.content_security_policy.header_value
-
指定浏览器强制实施的限制,以帮助最大限度地降低某些类型安全威胁的风险。
routing.http.response.x_content_type_options.header_value
-
表示是否应遵循内容MIME类型标题中公布的类型,而不应更改。
routing.http.response.x_frame_options.header_value
-
表示是否允许浏览器在框架、iframe、嵌入或对象中呈现页面。
侦听器规则
每个侦听器都有默认操作,也称为默认规则。默认规则无法删除,并且始终在最后执行。可以创建其他规则,这些规则由优先级、一个或多个操作以及一个或多个条件组成。您可以随时添加或编辑规则。有关更多信息,请参阅 编辑规则。
默认规则
创建侦听器时,请为默认规则定义操作。默认规则不能有条件。如果未满足侦听器的任一规则条件,则将执行默认规则的操作。
下面是控制台中所示的默认规则的示例:
规则优先级
每个规则都有一个优先级。规则是按优先级顺序 (从最低值到最高值) 计算的。最后评估默认规则。您可以随时更改非默认规则的优先级。您不能更改默认规则的优先级。有关更多信息,请参阅 更新规则优先级。
规则操作
每个规则操作都具有执行操作所需的类型、优先级和信息。有关更多信息,请参阅 规则操作类型。
规则条件
每个规则条件都有类型和配置信息。当规则的条件满足时,将执行其操作。有关更多信息,请参阅 规则条件类型。
规则操作类型
以下是侦听器规则支持的操作类型:
authenticate-cognito
-
[HTTPS听众] 使用 Amazon Cognito 对用户进行身份验证。有关更多信息,请参阅 使用 Application Load Balancer 验证用户身份。
authenticate-oidc
-
[HTTPS听众] 使用符合 OpenID Conn OIDC ect () 的身份提供者对用户进行身份验证。
fixed-response
-
返回自定义HTTP响应。有关更多信息,请参阅 固定响应操作。
forward
-
将请求转发到指定目标组。有关更多信息,请参阅 转发操作。
redirect
-
将请求从一个重定向URL到另一个请求。有关更多信息,请参阅 重定向操作。
先执行优先级最低的操作。每条规则必须包含以下操作之一:forward
、redirect
或 fixed-response
,并且其必须为要执行的最后一个操作。
如果协议版本为 g RPC 或 HTTP /2,则仅支持的操作是forward
操作。
固定响应操作
您可以使用fixed-response
操作来删除客户端请求并返回自定义HTTP响应。您可以使用此操作返回 2XX、4XX 或 5XX 响应代码和可选的消息。
采取fixed-response
操作后,重定向目标URL的操作和操作将记录在访问日志中。有关更多信息,请参阅 访问日志条目。成功 fixed-response
操作的计数在 HTTP_Fixed_Response_Count
指标中报告。有关更多信息,请参阅 Application Load Balancer 指标。
例 的固定响应操作示例 AWS CLI
您可以在创建或修改规则时指定操作。有关更多信息,请参阅 create-rule 和 modify-rule 命令。以下操作发送具有指定状态代码和消息正文的固定响应。
[ { "Type": "fixed-response", "FixedResponseConfig": { "StatusCode": "200", "ContentType": "text/plain", "MessageBody": "Hello world" } } ]
转发操作
您可以使用 forward
操作,将请求路由到一个或多个目标组。如果为某个 forward
操作指定多个目标组,您必须为每个目标组指定权重。每个目标组权重都是一个介于 0 到 999 之间的值。对于将侦听器规则与加权目标组匹配的请求,会根据这些目标组的权重分配给这些目标组。例如,如果指定两个目标组,每个目标组的权重为 10,则每个目标组将接收一半的请求。如果指定两个目标组,一个权重为 10,另一个权重为 20,则权重为 20 的目标组接收的请求将是另一个目标组的两倍。
默认情况下,配置规则以便在加权目标组之间分配流量时,并不能保证支持粘性会话。为了确保支持粘性会话,请为规则启用目标组粘性。当负载均衡器首次将请求路由到加权目标组时,它会生成一个名为的 Cookie AWSALBTG ,用于对有关选定目标组的信息进行编码,对 Cookie 进行加密,并将该 Cookie 包含在对客户端的响应中。客户端应该在向负载均衡器的后续请求中包含它收到的 cookie。当负载均衡器收到与启用目标组粘性的规则匹配并且包含 Cookie 的请求时,请求将路由到 Cookie 中指定的目标组。
应用程序负载均衡器不支持URL编码的 Cookie 值。
对CORS于(跨域资源共享)请求,某些浏览器SameSite=None; Secure
需要启用粘性。在这种情况下,Elastic Load Balancing 会生成第二个 cookie AWSALBTGCORS,其中包含与原始粘性 cookie 相同的信息以及此SameSite
属性。客户端会同时收到这两个 Cookie。
例 带有一个目标组的转发操作示例
您可以在创建或修改规则时指定操作。有关更多信息,请参阅 create-rule 和 modify-rule 命令。以下操作将请求转发到指定的目标组。
[ { "Type": "forward", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:
us-west-2
:123456789012
:targetgroup/my-targets
/73e2d6bc24d8a067
" } ] } } ]
例 带有两个加权目标组的转发操作示例
下面的操作将根据每个目标组的权重,将请求转发到两个指定的目标组。
[ { "Type": "forward", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:
us-west-2
:123456789012
:targetgroup/blue-targets
/73e2d6bc24d8a067
", "Weight": 10 }, { "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2
:123456789012
:targetgroup/green-targets
/09966783158cda59
", "Weight": 20 } ] } } ]
例 启用粘性的转发操作示例
如果您具有一个包含多个目标组的转发操作,并且一个或多个目标组已启用了粘性会话,则必须启用目标组粘性。
下面的操作将请求转发到两个指定的目标组,并启用了目标组粘性。对于不包含粘性 Cookie 的请求,将根据每个目标组的权重进行传输。
[ { "Type": "forward", "ForwardConfig": { "TargetGroups": [ { "TargetGroupArn": "arn:aws:elasticloadbalancing:
us-west-2
:123456789012
:targetgroup/blue-targets
/73e2d6bc24d8a067
", "Weight": 10 }, { "TargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2
:123456789012
:targetgroup/green-targets
/09966783158cda59
", "Weight": 20 } ], "TargetGroupStickinessConfig": { "Enabled": true, "DurationSeconds": 1000 } } } ]
重定向操作
您可以使用redirect
操作将客户端请求从一个重定向URL到另一个请求。您可以根据需要将重定向配置为临时 (HTTP302) 或永久 (HTTP301)。
A URI 由以下组件组成:
protocol
://hostname
:port
/path
?query
您必须修改以下至少一个组成部分以避免重定向循环:协议、主机名、用户名、端口或路径。未修改的任何组成部分将保留其原始值。
- protocol
-
协议(HTTP或HTTPS)。您可以重定向HTTP到HTTP、HTTP重定HTTPS向和重定向HTTPS。HTTPS您无法重定HTTPS向到HTTP。
- hostname
-
主机名。主机名不区分大小写,长度最多为 128 个字符,由字母数字字符、通配符(* 和 ?)及连字符 (-) 组成。
- port (远程调试端口)
-
端口(1 到 65535)。
- path
-
绝对路径,以前导“/”开头。路径区分大小写,长度最多为 128 个字符,由字母数字字符、通配符(* 和 ?)、&(使用 &)及以下特殊字符组成:_-.$/~"'@:+。
- 查询
-
查询参数。最大长度为 128 个字符。
您可以使用以下保留关键字在目标URL中重复URL使用原始URI组件的组件:
-
#{protocol}
– 保留协议。在协议和查询组成部分中使用。 -
#{host}
– 保留域。在主机名、路径和查询组成部分中使用。 -
#{port}
– 保留端口。在端口、路径和查询组成部分中使用。 -
#{path}
– 保留路径。在路径和查询组成部分中使用。 -
#{query}
– 保留查询参数。在查询组成部分中使用。
执行 redirect
操作时,操作记录在访问日志中。有关更多信息,请参阅 访问日志条目。成功 redirect
操作的计数在 HTTP_Redirect_Count
指标中报告。有关更多信息,请参阅 Application Load Balancer 指标。
例 使用控制台的重定向操作的示例
以下规则设置永久重定向到使用HTTPS协议和指定端口 (40443),但保留原始主机名、路径和查询参数的。URL此屏幕等同于“https://#{host}:40443/#{path}?#{query}”。
以下规则设置永久重定向到URL,保留原始协议、端口、主机名和查询参数,并使用#{path}
关键字创建修改后的路径。此屏幕等同于“#{protocol}://#{host}:#{port}/new/#{path}?#{query}”。
例 的重定向操作示例 AWS CLI
您可以在创建或修改规则时指定操作。有关更多信息,请参阅 create-rule 和 modify-rule 命令。以下操作将HTTP请求重定向到端口 443 上的HTTPS请求,其主机名、路径和查询字符串与请求相同。HTTP
[ { "Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "Host": "#{host}", "Path": "/#{path}", "Query": "#{query}", "StatusCode": "HTTP_301" } } ]
规则条件类型
以下是规则支持的条件类型:
host-header
-
基于每个请求的主机名进行路由。有关更多信息,请参阅 主机条件。
http-header
-
根据每个请求的HTTP标头进行路由。有关更多信息,请参阅 HTTP标题条件。
http-request-method
-
根据每个HTTP请求的请求方法进行路由。有关更多信息,请参阅 HTTP请求方法条件。
path-pattern
-
基于请求中的路径模式进行路由URLs。有关更多信息,请参阅 路径条件。
query-string
-
基于查询字符串中的键/值对或值进行路由。有关更多信息,请参阅 查询字符串条件。
source-ip
-
基于每个请求的源 IP 地址进行路由。有关更多信息,请参阅 源 IP 地址条件。
每个规则可以有选择地最多包含以下条件之一:host-header
、http-request-method
、path-pattern
和 source-ip
。每个规则还可以有选择地包含以下每个条件中的一个或多个:http-header
和 query-string
。
您可以为每个条件指定最多三个匹配评估。例如,对于每个http-header
条件,您最多可以指定三个字符串,以便与请求中HTTP标头的值进行比较。如果其中一个字符串与HTTP标题的值匹配,则满足条件。若要要求所有字符串都匹配,请为每个匹配评估创建一个条件。
您可以为每条规则指定最多五个匹配评估。例如,您可以创建一个具有五个条件的规则,其中每个条件都有一个匹配评估。
您可以在 http-header
、host-header
、path-pattern
和 query-string
条件的匹配评估中包含通配符。每条规则的通配符上限为五个。
规则仅适用于可见ASCII字符;不包括控制字符(0x00 到 0x1f 和 0x7f)。
有关演示,请参阅高级请求路由
HTTP标题条件
您可以使用HTTP标头条件来配置基于请求HTTP标头路由请求的规则。您可以指定标准或自定义HTTP标题字段的名称。标头名称和匹配评估不区分大小写。比较字符串支持以下通配符:*(匹配 0 个或多个字符)和 ?(完全匹配 1 个字符)。标头名称不支持通配符。
例 的HTTP标题条件示例 AWS CLI
您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rule 和 modify-rule 命令。具有与指定字符串之一匹配的 User-Agent 标头的请求满足以下条件。
[ { "Field": "http-header", "HttpHeaderConfig": { "HttpHeaderName": "User-Agent", "Values": ["*Chrome*", "*Safari*"] } } ]
HTTP请求方法条件
您可以使用HTTP请求方法条件来配置规则,根据请求的HTTP请求方法路由请求。您可以指定标准方法或自定义HTTP方法。匹配评估区分大小写。不支持通配符;因此,方法名称必须完全匹配。
我们建议您以相同的方式路由GET和HEAD请求,因为对HEAD请求的响应可能会被缓存。
例 的HTTP方法条件示例 AWS CLI
您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rule 和 modify-rule 命令。使用指定方法的请求满足以下条件。
[ { "Field": "http-request-method", "HttpRequestMethodConfig": { "Values": ["CUSTOM-METHOD"] } } ]
主机条件
您可以使用主机条件来定义基于主机标头中的主机名路由请求的规则(也称为基于主机的路由)。这使您能够使用单个负载均衡器支持多个子域和不同的顶级域。
主机名不区分大小写,长度上限为 128 个字符,并且可包含以下任何字符:
-
A-Z、a-z、0-9
-
- .
-
*(匹配 0 个或多个字符)
-
?(完全匹配 1 个字符)
您必须包含至少一个“.”字符。在最后一个“.”字符之后只能包含字母数字字符。
主机名示例
-
example.com
-
test.example.com
-
*.example.com
规则 *.example.com
与 test.example.com
匹配,但与 example.com
不匹配。
例 的主机标头条件示例 AWS CLI
您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rule 和 modify-rule 命令。具有与指定字符串匹配的主机标头的请求满足以下条件。
[ { "Field": "host-header", "HostHeaderConfig": { "Values": ["*.example.com"] } } ]
路径条件
您可以使用路径条件来定义基于请求URL中的路由请求的规则(也称为基于路径的路由)。
路径模式仅应用于的路径URL,而不应用于其查询参数。它仅适用于可见ASCII字符;不包括控制字符(0x00 到 0x1f 和 0x7f)。
只有在URI标准化发生后才会执行规则评估。
路径模式区分大小写,长度最多为 128 个字符,并且可包含以下任何字符。
-
A-Z、a-z、0-9
-
_ - . $ / ~ " ' @ : +
-
&(使用 &)
-
*(匹配 0 个或多个字符)
-
?(完全匹配 1 个字符)
如果协议版本为 gRPC,则条件可能因包、服务或方法而异。
HTTP路径模式示例
-
/img/*
-
/img/*/pics
g RPC 路径模式示例
-
/package
-
/package.service/
-
/package.service/method
路径模式用于路由请求,而不是更改请求。例如,如果一个规则的路径模式为 /img/*
,此规则会将 /img/picture.jpg
的请求作为 /img/picture.jpg
的请求转发给指定目标组。
例 的路径模式条件示例 AWS CLI
您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rule 和 modify-rule 命令。使用包含指定字符串URL的请求满足以下条件。
[ { "Field": "path-pattern", "PathPatternConfig": { "Values": ["/img/*"] } } ]
查询字符串条件
您可以使用查询字符串条件来配置基于查询字符串中的键/值对或值路由请求的规则。匹配评估不区分大小写。支持以下通配符:*(匹配 0 个或多个字符)和 ?(完全匹配 1 个字符)。
例 的查询字符串条件示例 AWS CLI
您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rule 和 modify-rule 命令。具有包括键/值对“version=v1”或任意键设置为“example”的查询字符串的请求满足以下条件。
[ { "Field": "query-string", "QueryStringConfig": { "Values": [ { "Key": "version", "Value": "v1" }, { "Value": "*example*" } ] } } ]
源 IP 地址条件
您可以使用源 IP 地址条件来配置基于请求的源 IP 地址路由请求的规则。IP 地址必须以CIDR格式指定。您可以同时使用IPv4和IPv6地址。不支持通配符。您不能255.255.255.255/32
CIDR为源 IP 规则条件指定。
如果客户端位于代理之后,则这是代理的 IP 地址,而不是客户端的 IP 地址。
X-Forwarded-For标题中的地址不符合此条件。要在 X-Forwarded-For标题中搜索地址,请使用http-header
条件。
例 的源 IP 条件示例 AWS CLI
您可以在创建或修改规则时指定条件。有关更多信息,请参阅 create-rule 和 modify-rule 命令。在指定CIDR区块之一中使用源 IP 地址的请求满足以下条件。
[ { "Field": "source-ip", "SourceIpConfig": { "Values": ["192.0.2.0/24", "198.51.100.10/32"] } } ]
HTTP标头和应用程序负载均衡器
HTTP请求和HTTP响应使用标头字段来发送有关HTTP消息的信息。HTTP标题是自动添加的。标头字段为冒号分隔的名称值对,各个值对之间由回车符 (CR) 和换行符 (LF) 进行分隔。RFC2616 “邮件HTTP标题” 中定义了一组标准的标头X-Forwarded
前缀。Application Load Balancer 支持以下 X-Forwarded
标头。
有关HTTP连接的更多信息,请参阅 Elastic Load Balancing 用户指南中的请求路由。
X-Forwarded 标头
X-Forwarded-For
X-Forwarded-For
请求标头可帮助您在使用HTTP或HTTPS负载均衡器时识别客户端的 IP 地址。由于负载均衡器会拦截客户端和服务器之间的流量,因此您的服务器访问日志中将仅包含负载均衡器的 IP 地址。要查看客户端的 IP 地址,请使用 routing.http.xff_header_processing.mode
属性。此属性使您能够在 Application Load Balancer 将HTTP请求发送到目标之前,修改、保留或删除请求中的X-Forwarded-For
标头。此属性的可能值为 append
、preserve
和 remove
。此属性的默认值为 append
。
重要
由于存在安全风险,应谨慎使用 X-Forwarded-For
标头。只有由网络内得到妥善保护的系统添加的条目才被视为可信。
Append
默认情况下,应用程序负载均衡器会在 X-Forwarded-For
请求标头中存储客户端的 IP 地址,并将该标头传递到您的服务器。如果 X-Forwarded-For
请求标头未包含在原始请求中,则负载均衡器会创建一个以客户端 IP 地址作为请求值的标头。否则,负载均衡器会将客户端 IP 地址附加到现有标头,然后将该标头传递到您的服务器。X-Forwarded-For
请求标头可能包含多个以逗号分隔的 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-address
的 client-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
的X-Forwarded-For
请求标头示例8080
。
X-Forwarded-For: 12.34.56.78:8080
以下是IPv6地址为、端口号为的客户端2001:db8:85a3:8d3:1319:8a2e:370:7348
的X-Forwarded-For
请求标头示例8080
。
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
属性选择了 preserve
或 remove
,则应用程序负载均衡器将覆盖客户端端口保留属性。它会将 X-Forwarded-For
标头保留不变,或者根据您选择的模式将其移除,然后再将请求发送到目标。
当您选择 append
、preserve
或者 remove
模式时目标将收到的 X-Forwarded-For
标头示例见下表。在此例中,最后一跳的 IP 地址为 127.0.0.1
。
请求描述 |
示例请求 |
XFF在append 模式下 |
XFF在preserve 模式下 |
XFF在remove 模式下 |
---|---|---|---|---|
请求发送时没有标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 |
不存在 |
发送的请求带有多个客户端 IP 地址的XFF标头。 | 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 使用控制台标题
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择负载均衡器。
-
选择负载均衡器。
-
在属性选项卡上,选择编辑。
-
在 “流量配置” 部分的 “数据包处理” 下,为X-Forwarded-For 标题选择追加(默认)、“保留” 或 “移除”。
-
选择 Save changes(保存更改)。
要修改、保留或删除 X-Forwarded-For 标题使用 AWS CLI
使用带有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
以下示例包含来自客户端的X-Forwarded-Proto
请求的请求标头,该请求是作为HTTPS请求发出的:
X-Forwarded-Proto: https
X-Forwarded-Port
X-Forwarded-Port
请求标头可帮助您识别客户端与您的负载均衡器连接时所用的目标端口。