

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

# 配置经典负载均衡器
<a name="environments-cfg-clb"></a>

[启用负载平衡](using-features-managing-env-types.md#using-features.managing.changetype)后，您的 AWS Elastic Beanstalk 环境将配备 Elastic Load Balancing 负载均衡器，用于在环境中的实例之间分配流量。Elastic Load Balancing 支持多种负载均衡器类型。要了解更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/)。Elastic Beanstalk 可以为您创建负载均衡器，或者让您指定已创建的共享负载均衡器。

本主题介绍 Elastic Beanstalk 创建并专用于您的环境的 [经典负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/) 的配置。有关配置 Elastic Beanstalk 支持的所有负载均衡器类型的信息，请参阅[Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)。

**注意**  
您只能在创建环境期间选择您的环境使用的负载均衡器类型。稍后，您可以更改设置以管理运行环境的负载均衡器行为，但不能更改其类型。

## 简介
<a name="environments-cfg-clb-intro"></a>

[经典负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/) 是 Elastic Load Balancing 的上一代负载均衡器。它支持将 HTTP、HTTPS 或 TCP 请求流量路由到环境实例上的不同端口。

当您的环境使用经典负载均衡器时，默认情况下，Elastic Beanstalk 会将其配置为[侦听](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-listener-config.html)端口 80 上的 HTTP 流量并转发给同一端口上的实例。虽然您无法删除端口 80 默认侦听器，但您可以将其禁用，这通过阻止流量来实现相同的功能。请注意，您可以添加或删除其他侦听器。要支持安全的连接，您可以使用端口 443 上的侦听器和 TLS 证书来配置负载均衡器。

负载均衡器使用运行[状况检查](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-healthchecks.html)来确定运行您的应用程序的 Amazon EC2 实例是否运行正常。运行状况检查会按设置的时间间隔对指定的 URL 发出请求。如果 URL 返回错误消息，或者在指定的超时期间内无法返回任何消息，则表示运行状况检查失败。

如果您的应用程序通过满足来自单一服务器上的同一客户端的多个请求来提高性能，您可以将负载均衡器配置为使用[粘性会话](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html)。对于粘性会话，负载均衡器会将一个 Cookie 添加到 HTTP 响应中，用于识别提供请求的 Amazon EC2 实例。当从同一客户端收到后续请求时，负载均衡器会使用 Cookie 将该请求发送到同一实例。

借助[跨区域负载均衡](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-disable-crosszone-lb.html)，经典负载均衡器的每个负载均衡器节点会跨所有启用的可用区中的已注册实例平均分配请求。如果禁用了跨区域负载均衡，则每个负载均衡器节点会仅在其可用区中的已注册实例之间平均分配请求。

如果由于运行状况不佳或缩减环境规模而从负载均衡器中删除一个实例，[Connection Draining](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-conn-drain.html) 将为该实例留出一些时间以完成请求，然后再关闭实例和负载均衡器之间的连接。您可以更改为实例预留的用于发送响应的时间量，或完全禁用连接耗尽。

**注意**  
在您使用 Elastic Beanstalk 控制台或 EB CLI 创建环境时，默认情况下将启用 Connection Draining。对于其他客户端，您可以使用[配置选项](#environments-cfg-clb-namespace)启用该功能。

您可以使用高级负载均衡器设置在任意端口上配置侦听器，修改其他粘性会话设置，并将负载均衡器配置为安全地连接到 EC2 实例。这些设置是通过[配置选项](#environments-cfg-clb-namespace)提供的，您可以使用源代码中的配置文件设置这些选项，也可以使用 Elastic Beanstalk API 直接在环境中设置这些选项。在 Elastic Beanstalk 控制台中也提供了其中的很多设置。此外，您还可以将负载均衡器配置为[将访问日志上传](environments-cfg-loadbalancer-accesslogs.md)到 Amazon S3。

## 使用 Elastic Beanstalk 控制台配置经典负载均衡器
<a name="environments-cfg-clb-console"></a>

在创建环境期间或以后运行您的环境时，您可以使用 Elastic Beanstalk 控制台配置经典负载均衡器的端口、HTTPS 证书和其他设置。

**注意**  
在**创建环境**控制台向导中禁用了经典负载均衡器（CLB）选项。如果某个现有的环境已经配置了经典负载均衡器，则可以使用 Elastic Beanstalk 控制台或 [EB CLI](using-features.managing.clone.md#using-features.managing.clone.CLI) [克隆现有环境](using-features.managing.clone.md)，从而创建新环境。您还可以选择使用 EB CLI 或 [AWS CLI](environments-create-awscli.md) 创建配置了经典负载均衡器的新环境。这些命令行工具将使用 CLB 创建一个新环境，即使您的账户中尚不存在该环境。

**在 Elastic Beanstalk 控制台中配置正在运行环境的经典负载均衡器**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Load balancer (负载均衡器)** 配置类别中，选择 **Edit (编辑)**。
**注意**  
如果 **Load balancer (负载均衡器)** 配置类别没有 **Edit (编辑)** 按钮，则表示您的环境没有负载均衡器。要了解如何设置负载均衡器，请参阅[更改环境类型](using-features-managing-env-types.md#using-features.managing.changetype)。

1. 根据环境需要进行经典负载均衡器配置更改。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

**Topics**
+ [侦听器](#using-features.managing.elb.listeners)
+ [会话](#using-features.managing.elb.sessions)
+ [跨可用区负载均衡](#using-features.managing.elb.cross-zone)
+ [连接耗尽](#using-features.managing.elb.draining)
+ [健康检查](#using-features.managing.elb.healthchecks)

### 侦听器
<a name="using-features.managing.elb.listeners"></a>

可以使用该列表为您的负载均衡器指定侦听器。每个侦听器使用指定协议将指定端口上的传入客户端流量路由到您的实例。最初，该列表显示默认侦听器，它将端口 80 上的传入 HTTP 流量路由到侦听端口 80 上的 HTTP 流量的环境实例服务器。

**注意**  
虽然您无法删除端口 80 默认侦听器，但您可以将其禁用，这通过阻止流量来实现相同的功能。

![\[经典负载均衡器配置 – 编辑侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-clb-listeners.png)


**配置现有的侦听器**

1. 选中表条目旁边的复选框，选择**操作**，然后选择所需的操作。

1. 如果您选择**编辑**，请使用 **经典负载均衡器侦听器** 对话框编辑设置，然后选择**保存**。

例如，您可以编辑默认侦听器并将**协议**从 **HTTP** 更改为 **TCP**（如果您希望负载均衡器按原样转发请求）。这可防止负载均衡器重写标头 (包括 `X-Forwarded-For`)。该方法不适用于粘性会话。

![\[经典负载均衡器配置 – 将默认侦听器的协议更改为 TCP\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-clb-listeners-tcp.png)


**添加侦听器**

1. 选择**添加侦听器**。

1. 在 **经典负载均衡器侦听器** 对话框中，配置所需的设置，然后选择**添加**。

添加安全侦听器是一个常见案例。下图中的示例为端口 443 上的 HTTPS 流量添加侦听器。该侦听器将传入流量路由到侦听端口 443 上的 HTTPS 流量的环境实例服务器。

确保您具有有效的 SSL 证书，然后才能配置 HTTPS 侦听器。请执行以下操作之一：
+ 如果 AWS Certificate Manager (ACM) [在您所在的 AWS 地区可用](https://docs.aws.amazon.com/general/latest/gr/acm.html)，请使用 ACM 创建或导入证书。有关请求 ACM 证书的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[请求证书](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)。有关将第三方证书导入 ACM 中的更多信息，请参阅 *AWS Certificate Manager 用户指南*中的[导入证书](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)。
+ 如果您所在的[AWS 地区没有 ACM，请将您](https://docs.aws.amazon.com/general/latest/gr/acm.html)现有的证书和密钥上传到 IAM。有关创建证书并将证书上传到 IAM 的更多信息，请参阅《*IAM 用户指南*》中的[使用服务器证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingServerCerts.html)。

有关在 Elastic Beanstalk 中配置 HTTPS 和使用证书的更多详细信息，请参阅[为 Elastic Beanstalk 环境配置 HTTPS](configuring-https.md)。

对于 **SSL 证书**，选择 SSL 证书的 ARN。例如，`arn:aws:iam::123456789012:server-certificate/abc/certs/build` 或 `arn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678`。

![\[经典负载均衡器配置 – 添加安全侦听器\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-clb-listeners-https.png)


有关在 Elastic Beanstalk 中配置 HTTPS 和使用证书的详细信息，请参阅[为 Elastic Beanstalk 环境配置 HTTPS](configuring-https.md)。

### 会话
<a name="using-features.managing.elb.sessions"></a>

选中或清除**会话粘性已启用**框来启用或禁用粘性会话。使用 **Cookie 持续时间**配置粘性会话的持续时间，最多为 **1000000** 秒。在 **Load balancer ports (负载均衡器端口)** 列表上，选择默认策略 (`AWSEB-ELB-StickinessPolicy`) 应用于的侦听器端口。

![\[经典负载均衡器的会话粘性和持续时间设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-sessions.png)


### 跨可用区负载均衡
<a name="using-features.managing.elb.cross-zone"></a>

选中或清除**跨多可用区的负载均衡已启用**框以启用或禁用跨区域负载均衡。

![\[经典负载均衡器跨区域负载均衡设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-cross-zone.png)


### 连接耗尽
<a name="using-features.managing.elb.draining"></a>

选中或清除**连接耗尽已启用**框来启用或禁用连接耗尽。设置**耗尽超时**，最多为 **3600** 秒。

![\[经典负载均衡器的 Connection Draining 和耗尽超时设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-draining.png)


### 健康检查
<a name="using-features.managing.elb.healthchecks"></a>

可以使用以下设置配置负载均衡器运行状况检查：
+ **Health check path (运行状况检查路径)** – 负载均衡器将运行状况检查请求发送到的路径。如果未设置路径，负载均衡器将尝试在端口 80 上建立 TCP 连接以验证运行状况。
+ **Timeout (超时)** – 等待运行状况检查响应的时间（秒）。
+ **Interval (间隔)** – 单个实例的两次运行状况检查间隔的时间（秒）。间隔必须大于超时。
+ **Unhealthy threshold (不正常阈值)** 和 **Healthy threshold (正常阈值)** – 在 Elastic Load Balancing 更改实例的运行状况之前，实例必须通过或未通过的运行状况检查次数。

![\[经典负载均衡器的运行状况检查设置\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/aeb-config-elb-healthcheck.png)


**注意**  
Elastic Load Balancing 运行状况检查不会影响环境的 Auto Scaling 组的运行状况检查行为。Amazon A EC2 uto Scaling 不会自动替换未通过 Elastic Load Balancing 运行状况检查的实例，除非您手动将 Amazon A EC2 uto Scaling 配置为这样做。有关详细信息，请参阅 [Elastic Beanstalk 环境的 Auto Scaling 运行状况检查设置](environmentconfig-autoscaling-healthchecktype.md)。

有关运行状况检查以及其对环境的总体运行状况的影响的更多信息，请参阅[基本运行状况报告](using-features.healthstatus.md)。

## 使用 EB CLI 配置经典负载均衡器
<a name="environments-cfg-clb-ebcli"></a>

当您运行 [**eb create**](eb3-create.md) 时，EB CLI 会提示您选择负载均衡器类型。

```
$ eb create
Enter Environment Name
(default is my-app): test-env
Enter DNS CNAME prefix
(default is my-app): test-env-DLW24ED23SF

Select a load balancer type
1) classic
2) application
3) network
(default is 1):
```

按 **Enter** 以选择 `classic`。

您也可以使用 `--elb-type` 选项指定负载均衡器类型。

```
$ eb create test-env --elb-type classic
```

## 经典负载均衡器配置命名空间
<a name="environments-cfg-clb-namespace"></a>

您可以在以下命名空间中找到与经典负载均衡器相关的设置：
+ [`aws:elb:healthcheck`](command-options-general.md#command-options-general-elbhealthcheck) – 配置负载均衡器运行状况检查的阈值、检查间隔和超时。
+ [`aws:elasticbeanstalk:application`](command-options-general.md#command-options-general-elasticbeanstalkapplication) – 配置运行状态检查 URL。
+ [`aws:elb:loadbalancer`](command-options-general.md#command-options-general-elbloadbalancer) – 启用跨区域负载均衡 向负载均衡器分配安全组并覆盖 Elastic Beanstalk 创建的默认安全组。此命名空间还包含一些已弃用的选项，这些选项用于配置已由 `aws:elb:listener` 命名空间中的选项替代的标准侦听器和安全侦听器。
+ [`aws:elb:listener`](command-options-general.md#command-options-general-elblistener) – 在端口 80 上配置默认侦听器、在端口 443 上配置安全侦听器或在任何端口上配置针对任何协议的其他侦听器。如果您指定 `aws:elb:listener` 作为命名空间，设置适用于端口 80 上的默认监听器。如果您指定了端口 (例如 `aws:elb:listener:443`)，则在该端口上配置监听器。
+ [`aws:elb:policies`](command-options-general.md#command-options-general-elbpolicies) – 配置负载均衡器的其他设置。使用此命名空间中的选项在任意端口上配置侦听器，修改其他粘性会话设置，并将负载均衡器配置为安全地连接到 Amazon EC2 实例。

EB CLI 和 Elastic Beanstalk 控制台会对前面的选项应用建议的值。如果您需要使用配置文件来配置相同的项，则必须删除这些设置。有关更多信息，请参阅 [建议值](command-options.md#configuration-options-recommendedvalues)。

**Example .ebextensions/loadbalancer-terminatehttps.config**  
以下示例配置文件将在端口 443 上创建一个 HTTPS 侦听器，分配负载均衡器用于终止安全连接的证书，并禁用端口 80 上的默认侦听器。负载均衡器通过 HTTP: 80 将解密后的请求转发到您环境中的 EC2 实例。  

```
option_settings:
  aws:elb:listener:443:
    ListenerProtocol: HTTPS
    SSLCertificateId: arn:aws:acm:us-east-2:123456789012:certificate/12345678-12ab-34cd-56ef-12345678
    InstancePort: 80
    InstanceProtocol: HTTP
  aws:elb:listener:
    ListenerEnabled: false
```