

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在負載平衡器設定 HTTPS 終止
<a name="configuring-https-elb"></a>

若要更新您的 AWS Elastic Beanstalk 環境以使用 HTTPS，您需要為環境中的負載平衡器設定 HTTPS 接聽程式。兩種負載平衡器類型支援 HTTPS 接聽程式：Classic Load Balancer 和 Application Load Balancer。

您可以使用 Elastic Beanstalk 主控台或組態檔來設定安全接聽程式，並指派憑證。

**注意**  
單一執行個體環境沒有負載平衡器，不在負載平衡器支援 HTTPS 終止。

## 使用 Elastic Beanstalk 主控台設定安全接聽程式
<a name="configuring-https-elb.console"></a>

**若要指派憑證給您環境中的負載平衡器**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在 **Load balancer (負載平衡器)** 組態類別中，選擇 **Edit (編輯)**。
**注意**  
如果 **Load balancer (負載平衡器)** 組態類別沒有 **Edit (編輯)** 按鈕，您的環境便沒有[負載平衡器](using-features-managing-env-types.md#using-features.managing.changetype)。

1. 在**修改負載平衡器**頁面，程序會因與您的環境關聯的負載平衡器類型而不同。
   + **Classic Load Balancer**

     1. 選擇 **Add listener (新增接聽程式)**。

     1. 在 **Classic Load Balancer listener (Classic Load Balancer 接聽程式)** 對話方塊中，設定下列設定：
        + 對於 **Listener port (接聽程式連接埠)**，輸入傳入流量連接埠，通常為 `443`。
        + 對於 **Listener protocol (接聽程式協定)**，選擇 ** HTTPS **。
        + 對於 **Instance type (執行個體連接埠)**，輸入 `80`。
        + 對於 **Instance protocol (執行個體協定)**，選擇 **HTTP**。
        + 對於 **SSL certificate (SSL 憑證)**，選擇您的憑證。

     1. 選擇**新增**。
   + **Application Load Balancer**

     1. 選擇 **Add listener (新增接聽程式)**。

     1. 在 **Application Load Balancer listener (Application Load Balancer 接聽程式)** 對話方塊中，設定下列設定：
        + 在 **Port (連接埠)** 中輸入傳入流量連接埠，通常為 `443`。
        + 請在 **Protocol (通訊協定)** 中選擇 **HTTPS**。
        + 對於 **SSL certificate (SSL 憑證)**，選擇您的憑證。

     1. 選擇**新增**。
**注意**  
若是使用 Classic Load Balancer 和 Application Load Balancer，如果下拉式選單未顯示任何憑證，您應該在 [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/) (偏好) 中為[自訂網域名稱](customdomains.md)建立或上傳憑證。或是使用 AWS CLI將憑證上傳到 IAM。
   + **Network Load Balancer**

     1. 選擇 **Add listener (新增接聽程式)**。

     1. 在 **Network Load Balancer listener (Network Load Balancer 接聽程式)** 對話方塊中，對於 **Port (連接埠)**，輸入傳入流量連接埠，通常是 `443`。

     1. 選擇**新增**。

1. 若要儲存變更，請選擇頁面底部的**儲存變更**。

## 使用組態檔案設定安全接聽程式
<a name="configuring-https-elb.configurationfile"></a>

您可以利用以下其中一個[組態檔](ebextensions.md)設定負載平衡器的安全接聽程式。

**Example .ebextensions/securelistener-clb.config**  
當您的環境具有 Classic Load Balancer 時，請使用此範例。範例使用了 `aws:elb:listener` 命名空間中的選項，以指定的憑證設定 443 埠的 HTTPS 接聽程式，並透過 80 通訊埠，將加密的傳輸資料轉傳給您環境中的執行個體。  

```
option_settings:
  aws:elb:listener:443:
    SSLCertificateId: arn:aws:acm:us-east-2:1234567890123:certificate/####################################
    ListenerProtocol: HTTPS
    InstancePort: 80
```

用您憑證的 ARN 來取代反白顯示的文字。憑證可以是您在 AWS Certificate Manager (ACM) （偏好） 中建立或上傳的憑證，也可以是使用 上傳到 IAM 的憑證 AWS CLI。

如需 Classic Load Balancer 設定選項的詳細資訊，請參閱[Classic Load Balancer 組態命名空間](environments-cfg-clb.md#environments-cfg-clb-namespace)。

**Example .ebextensions/securelistener-alb.config**  
當您的環境具有 Application Load Balancer 時，請使用此範例。範例使用在 `aws:elbv2:listener` 命名空間中的選項，使用指定的憑證在連接埠 443 上設定 HTTPS 接聽程式。此接聽程式將流量路由傳送到預設的程序。  

```
option_settings:
  aws:elbv2:listener:443:
    ListenerEnabled: 'true'
    Protocol: HTTPS
    SSLCertificateArns: arn:aws:acm:us-east-2:1234567890123:certificate/####################################
```

**Example .ebextensions/securelistener-nlb.config**  
當您的環境具有 Network Load Balancer 時，請使用此範例。此範例使用 `aws:elbv2:listener` 命名空間中的選項來設定連接埠 443 上的接聽程式。此接聽程式將流量路由傳送到預設的程序。  

```
option_settings:
  aws:elbv2:listener:443:
    ListenerEnabled: 'true'
```

## 設定安全群組
<a name="configuring-https-elb.security-group"></a>

如果您設定負載平衡器，將傳輸資料轉傳到第 80 埠以外的執行個體通訊埠，則您必須新增安全群組的規則，允許從您的負載平衡器通過執行個體通訊埠傳入資料。如果您在自訂 VPC 中建立環境，Elastic Beanstalk 會為您新增此規則。

您可以在您應用程式的 `.ebextensions` 目錄中，將 `Resources` 金鑰加入[組態檔](ebextensions.md)，來新增這項規則。

以下範例組態檔案將傳入規則新增至 `AWSEBSecurityGroup` 安全群組。如此將允許來自負載平衡器安全群組的連接埠 1000 流量。

**Example .ebextensions/sg-ingressfromlb.config**  

```
Resources:
  sslSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 1000
      FromPort: 1000
      SourceSecurityGroupId: {"Fn::GetAtt" : ["AWSEBLoadBalancerSecurityGroup", "GroupId"]}
```