

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 经典负载均衡器的侦听器
<a name="elb-listener-config"></a>

在开始使用 Elastic Load Balancing 之前，您必须为经典负载均衡器配置一个或多个*侦听器*。侦听器是用于检查连接请求的进程。使用前端（客户端到负载均衡器）连接的协议和端口和后端（负载均衡器到后端实例）连接的协议和端口配置侦听器。

Elastic Load Balancing 支持以下协议：
+ HTTP
+ HTTPS（安全 HTTP）
+ TCP
+ SSL (安全 TCP)

HTTPS 协议使用 SSL 协议在 HTTP 层上建立安全连接。您也可以使用 SSL 协议在 TCP 层上建立安全连接。

如果前端连接使用 TCP 或 SSL，则您的后端连接可以使用 TCP 或 SSL。如果前端连接使用 HTTP 或 HTTPS，则您的后端连接可以使用 HTTP 或 HTTPS。

后端实例可以侦听端口 1-65535。

负载均衡器可以侦听以下端口：1–65535

**Topics**
+ [

## 协议
](#elb-listener-protocols)
+ [

## HTTPS/SSL 侦听器
](#https-ssl-listeners)
+ [

# 经典负载均衡器的侦听器配置
](using-elb-listenerconfig-quickref.md)
+ [

# HTTP 标头和经典负载均衡器
](x-forwarded-headers.md)

## 协议
<a name="elb-listener-protocols"></a>

典型 Web 应用程序的通信可以穿过硬件和软件的各个分层。每层都会提供特定的通信功能。对通信功能的控制可依次由一层传递至下一层。开放系统互连 (OSI) 会定义模型框架，以在这些分层中实施标准通信格式，这个框架被称为*协议*。有关更多信息，请参阅 Wikipedia 中的 [OSI 模型](https://en.wikipedia.org/wiki/OSI_model)。

使用 Elastic Load Balancing 时，您需要对分层 4 和分层 7 有基本的了解。分层 4 是传输层，描述了客户端到您的后端实例之间通过负载均衡器的传输控制协议 (TCP) 连接。分层 4 是可为您的负载均衡器配置的最低分层。分层 7 是应用程序层，描述了客户端到负载均衡器、以及负载均衡器到您的后端实例之间的超文本传送协议 (HTTP) 和 HTTPS (安全 HTTP) 连接。

安全套接字层 (SSL) 协议主要用于对通过不安全网络（如 Internet）传输的机密数据进行加密。SSL 协议在客户端与后端服务器之间建立安全连接，确保在您的客户端和服务器之间传递的所有数据都是私有且完整的。

### TCP/SSL 协议
<a name="using-elb-tcp-layer4"></a>

如果您在前端和后端连接中均使用 TCP (分层 4)，您的负载均衡器会将请求转发到后端实例，而不修改标头。负载均衡器收到请求之后，会尝试在侦听器配置中指定的端口上打开与后端实例的 TCP 连接。

由于负载均衡器会拦截客户端与您的后端实例之间的流量，因此您的后端实例的访问日志中将包含负载均衡器的 IP 地址而不是原始客户端的 IP 地址。您可以启用代理协议，它会添加一个包含客户端的连接信息（如源 IP 地址、目标 IP 地址和端口号）的标头。该标头随后作为请求的一部分发送到后端实例。您可以解析请求的第一行来检索连接信息。有关更多信息，请参阅 [为经典负载均衡器配置代理协议](enable-proxy-protocol.md)。

通过使用此配置，您将不会收到会话粘性或 X-Forwarded 标头的 Cookie。

### HTTP/HTTPS 协议
<a name="using-elb-http-layer7"></a>

如果前端和后端连接均使用 HTTP（分层 7），负载均衡器会解析请求中的标头，然后将请求发送到后端实例。

对于 HTTP/HTTPS 负载均衡器后面的每个已注册且运行良好的实例，Elastic Load Balancing 都会打开并维护一个或多个 TCP 连接。这些连接可确保始终有已建立的连接，该连接已准备好接收 HTTP/HTTPS 请求。

HTTP 请求和 HTTP 响应使用标头字段发送有关 HTTP 消息的信息。Elastic Load Balancing 支持 `X-Forwarded-For` 标头。因为负载均衡器会拦截客户端和服务器之间的流量，因此您的服务器访问日志中将仅含有负载均衡器的 IP 地址。要查看客户端的 IP 地址，请使用 `X-Forwarded-For` 请求标头。有关更多信息，请参阅 [X-Forwarded-For](x-forwarded-headers.md#x-forwarded-for)。

使用 HTTP/HTTPS 时，您可在负载均衡器上启用粘性会话。粘性会话将用户的会话绑定到特定后端实例。这样可以确保在会话期间，来自同一用户的所有请求均将被发送到相同的后端实例中。有关更多信息，请参阅 [为经典负载均衡器配置粘性会话](elb-sticky-sessions.md)。

负载均衡器并不支持所有 HTTP 扩展名。如果负载均衡器因为意外的方法、响应码或其他非标准 HTTP 1.0/1.1 实施而无法终止请求，则需要使用 TCP 侦听器。

## HTTPS/SSL 侦听器
<a name="https-ssl-listeners"></a>

您可以使用以下安全功能创建负载均衡器。

### SSL 服务器证书
<a name="ssl-cert"></a>

如果前端连接使用 HTTPS 或 SSL，则必须在负载均衡器上部署 X.509 证书 (SSL 服务器证书)。负载均衡器先解密来自客户端的请求，然后再将请求发送到后端实例 (称为 *SSL 终端*)。有关更多信息，请参阅 [经典负载均衡器的 SSL/TLS 证书](ssl-server-cert.md)。

如果您不希望负载均衡器处理 SSL 终止 (称为 *SSL 卸载*)，可在前端和后端连接均使用 TCP，并为处理请求的已注册实例部署证书。

### SSL 协商
<a name="using-elb-cipher-settings"></a>

Elastic Load Balancing 将提供预定义的 SSL 协商配置，在客户端与您的负载均衡器之间建立连接时，这些配置用于进行 SSL 协商。SSL 协商配置提供了广泛的客户端兼容性，并使用名为*密码*的高强度加密算法。然而，某些使用案例可能需要对网络中的所有数据进行加密且只允许使用特定密码。某些安全合规性标准 (如 PCI、SOX 等) 可能要求客户端提供一组特定协议和密码，以确保符合安全标准。在此类情况下，您可以根据您的特定要求创建自定义 SSL 协商配置。您的密码和协议应在 30 秒内生效。有关更多信息，请参阅 [经典负载均衡器的 SSL 协商配置](elb-ssl-security-policy.md)。

### 后端服务器身份验证
<a name="using-elb-backend-auth"></a>

如果后端连接使用 HTTPS 或 SSL，您可以启用已注册实例的身份验证。之后您即可使用身份验证过程来确保实例仅接受加密的通信，并确保每个已注册实例具有正确的公有密钥。

有关更多信息，请参阅[配置后端服务器身份验证](elb-create-https-ssl-load-balancer.md#configure_backendauth_clt)。

# 经典负载均衡器的侦听器配置
<a name="using-elb-listenerconfig-quickref"></a>

下表描述了经典负载均衡器的 HTTP 和 HTTPS 侦听器的可能配置。


| 使用案例 | 前端协议 | 前端选项 | 后端协议 | 后端选项 | 注意 | 
| --- | --- | --- | --- | --- | --- | 
| 基本 HTTP 负载均衡器 | HTTP | NA | HTTP | NA |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/classic/using-elb-listenerconfig-quickref.html)  | 
| 保护使用 Elastic Load Balancing 的网站或应用程序以卸载 SSL 解密 | HTTPS | [SSL 协商](elb-ssl-security-policy.md) | HTTP | NA |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/classic/using-elb-listenerconfig-quickref.html)  | 
| 使用 end-to-end加密保护网站或应用程序 | HTTPS | [SSL 协商](elb-ssl-security-policy.md) | HTTPS | 后端身份验证 |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/classic/using-elb-listenerconfig-quickref.html)  | 

下表描述了经典负载均衡器的 TCP 和 SSL 侦听器的可能配置。


| 使用案例 | 前端协议 | 前端选项 | 后端协议 | 后端选项 | 注意 | 
| --- | --- | --- | --- | --- | --- | 
| 基本 TCP 负载均衡器 | TCP | NA | TCP | NA |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/classic/using-elb-listenerconfig-quickref.html)  | 
| 保护使用 Elastic Load Balancing 的网站或应用程序以卸载 SSL 解密 | SSL | [SSL 协商](elb-ssl-security-policy.md) | TCP | NA |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/classic/using-elb-listenerconfig-quickref.html)  | 
| 使用 Elastic Load Balancing end-to-end 加密保护网站或应用程序 | SSL | [SSL 协商](elb-ssl-security-policy.md) | SSL | 后端身份验证 |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/classic/using-elb-listenerconfig-quickref.html)  | 

# HTTP 标头和经典负载均衡器
<a name="x-forwarded-headers"></a>

HTTP 请求和 HTTP 响应使用标头字段发送有关 HTTP 消息的信息。标头字段为冒号分隔的名称值对，各个值对之间由回车符 (CR) 和换行符 (LF) 进行分隔。RFC 2616 [信息标头](https://datatracker.ietf.org/doc/html/rfc2616#section-4.2)中定义了标准 HTTP 标头字段集。此外还有应用程序广泛使用（和自动添加）的非标准 HTTP 标头。某些非标准 HTTP 标头具有 `X-Forwarded` 前缀。经典负载均衡器支持以下 `X-Forwarded` 标头。

有关 HTTP 连接的更多信息，请参阅 *Elastic Load Balancing 用户指南*中的[请求路由](https://docs.amazonaws.cn/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html#request-routing)。

**先决条件**
+ 确认您的侦听器设置支持 X-Forwarded 标头。有关更多信息，请参阅 [经典负载均衡器的侦听器配置](using-elb-listenerconfig-quickref.md)。
+ 配置您的 Web 服务器以记录客户端 IP 地址。

**Topics**
+ [

## X-Forwarded-For
](#x-forwarded-for)
+ [

## X-Forwarded-Proto
](#x-forwarded-proto)
+ [

## X-Forwarded-Port
](#x-forwarded-port)

## X-Forwarded-For
<a name="x-forwarded-for"></a>

在您使用 HTTP 或 HTTPS 负载均衡器时，`X-Forwarded-For` 请求标头可自动添加并帮助您识别客户端的 IP 地址。因为负载均衡器会拦截客户端和服务器之间的流量，因此您的服务器访问日志中将仅含有负载均衡器的 IP 地址。要查看客户端的 IP 地址，请使用 `X-Forwarded-For` 请求标头。Elastic Load Balancing 会在 `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
```

## X-Forwarded-Proto
<a name="x-forwarded-proto"></a>

`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
<a name="x-forwarded-port"></a>

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