本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建带有 HTTPS 侦听器的经典负载均衡器
负载均衡器从客户端获取请求,并在注册到负载均衡器的 EC2 实例之间分发这些请求。
您可以创建一个同时侦听 HTTP (80) 和 HTTPS (443) 端口的负载均衡器。如果指定 HTTPS 侦听器将请求发送到端口 80 上的实例,则负载均衡器将终止请求,并且不加密从负载均衡器到实例的通信。如果 HTTPS 侦听器将请求发送到端口 443 上的实例,则对从负载均衡器到实例的通信进行加密。
如果负载均衡器使用加密连接与实例通信,您可以选择启用实例身份验证。这可确保只有在实例的公钥与您出于通信目的为负载均衡器指定的密钥匹配时,负载均衡器才与实例通信。
有关如何向现有负载均衡器添加 HTTPS 侦听器的信息,请参阅为您的经典负载均衡器配置 HTTPS 侦听器。
前提条件
在您开始之前,请确保您已符合以下先决条件:
-
完成 准备 VPC 和 EC2 实例 中的步骤。
-
启动您计划向负载均衡器注册的 EC2 实例。这些实例的安全组必须允许来自负载均衡器的流量。
-
EC2 实例必须使用 HTTP 状态代码 200 响应运行状况检查的目标。有关更多信息,请参阅 为您的经典负载均衡器配置运行状况检查。
-
如果您计划在 EC2 实例上启用保持活动状态功能,我们建议将保持活动状态设置至少设置为负载均衡器的空闲超时设置。如果要确保由负载均衡器负责关闭与实例的连接,请确保在实例上设置的保持活动时间值要大于在负载均衡器上设置的空闲超时设置。有关更多信息,请参阅 配置经典负载均衡器的空闲连接超时。
-
如果您创建安全侦听器,必须在负载均衡器上部署 SSL 服务器证书。负载均衡器会在将请求发送到实例之前,使用证书终止并解密请求。如果您没有 SSL 证书,您可以创建一个。有关更多信息,请参阅经典负载均衡器的 SSL/TLS 证书。
使用 Amazon Web Services Management Console 创建 HTTPS/SSL 负载均衡器
使用 Amazon CLI 创建 HTTPS/SSL 负载均衡器
按照以下说明使用 Amazon CLI 创建 HTTPS/SSL 负载均衡器。
任务
步骤 1:配置侦听器
侦听器是用于检查连接请求的进程。使用前端 (客户端到负载均衡器) 连接的协议和端口与后端 (负载均衡器到实例) 连接的协议和端口配置侦听器。有关 Elastic Load Balancing 支持的端口、协议和侦听器配置的信息,请参阅经典负载均衡器的侦听器。
在此示例中,通过指定要用于前端和后端连接的端口和协议为您的负载均衡器配置两个侦听器。第一个侦听器接收端口 80 上的 HTTP 请求,并使用 HTTP 在端口 80 上向实例发送这些请求。第二个侦听器接受端口 443 上的 HTTPS 请求,并使用端口 80 上的 HTTP 向实例发送这些请求。
因为第二个侦听器在前端连接中使用 HTTPS,所以您必须在负载均衡器上部署 SSL 服务器证书。负载均衡器会在将请求发送到实例之前,使用证书终止并解密请求。
为您的负载均衡器配置侦听器
-
获取 SSL 证书的 Amazon Resource Name (ARN)。例如:
ACM
arn:aws:acm:
region
:123456789012
:certificate/12345678-1234-1234-1234-123456789012
IAM
arn:aws:iam::
123456789012
:server-certificate/my-server-certificate
-
使用以下 create-load-balancer 命令为负载均衡器配置两个侦听器:
aws elb create-load-balancer --load-balancer-name
my-load-balancer
--listeners "Protocol=http,LoadBalancerPort=80,InstanceProtocol=http,InstancePort=80" "Protocol=https,LoadBalancerPort=443,InstanceProtocol=http,InstancePort=80,SSLCertificateId="ARN
" --availability-zonesus-west-2a
以下为响应示例:
{ "DNSName": "my-loadbalancer-012345678.us-west-2.elb.amazonaws.com" }
-
(可选)使用以下 describe-load-balancers 命令查看负载均衡器的详细信息:
aws elb describe-load-balancers --load-balancer-name
my-load-balancer
步骤 2:配置 SSL 安全策略
您可选择预定义安全策略之一,或者可创建自己的自定义安全策略。否则,Elastic Load Balancing 使用默认预定义安全策略 ELBSecurityPolicy-2016-08
配置您的负载均衡器。建议您使用默认安全策略。有关安全策略的更多信息,请参阅经典负载均衡器的 SSL 协商配置。
验证您的负载均衡器是否与默认安全策略关联
使用以下 describe-load-balancers 命令:
aws elb describe-load-balancers --load-balancer-name
my-loadbalancer
以下为响应示例。请注意,ELBSecurityPolicy-2016-08
已在端口 443 上与负载均衡器关联。
{
"LoadBalancerDescriptions": [
{
...
"ListenerDescriptions": [
{
"Listener": {
"InstancePort": 80,
"SSLCertificateId": "ARN
",
"LoadBalancerPort": 443,
"Protocol": "HTTPS",
"InstanceProtocol": "HTTP"
},
"PolicyNames": [
"ELBSecurityPolicy-2016-08"
]
},
{
"Listener": {
"InstancePort": 80,
"LoadBalancerPort": 80,
"Protocol": "HTTP",
"InstanceProtocol": "HTTP"
},
"PolicyNames": []
}
],
...
}
]
}
如果您愿意,可以为您的负载均衡器配置 SSL 安全策略,而不是使用默认安全策略。
(可选)使用预定义 SSL 安全策略
-
使用以下 describe-load-balancer-policies 命令列出预定义安全策略的名称:
aws elb describe-load-balancer-policies
有关预定义安全策略的配置的信息,请参阅预定义 SSL 安全策略。
-
使用以下 create-load-balancer-policy 命令,利用您在上一步中描述的某个预定义安全策略创建 SSL 协商策略:
aws elb create-load-balancer-policy --load-balancer-name
my-loadbalancer
--policy-namemy-SSLNegotiation-policy
--policy-type-name SSLNegotiationPolicyType --policy-attributes AttributeName=Reference-Security-Policy,AttributeValue=predefined-policy
-
(可选)使用以下 describe-load-balancer-policies 命令验证是否已创建策略:
aws elb describe-load-balancer-policies --load-balancer-name
my-loadbalancer
--policy-namemy-SSLNegotiation-policy
响应包括策略的描述。
-
使用以下 set-load-balancer-policies-of-listener 命令在负载均衡器端口 443 上启用策略:
aws elb set-load-balancer-policies-of-listener --load-balancer-name
my-loadbalancer
--load-balancer-port 443 --policy-namesmy-SSLNegotiation-policy
注意
set-load-balancer-policies-of-listener
命令将指定负载均衡器端口的当前策略集替换为指定的策略集。--policy-names
列表必须包括要启用的所有策略。如果您省略当前已启用的策略,则禁用此策略。 -
(可选)使用以下 describe-load-balancers 命令验证是否已启用策略:
aws elb describe-load-balancers --load-balancer-name
my-loadbalancer
以下是指明已在端口 443 上启用策略的响应示例。
{ "LoadBalancerDescriptions": [ { .... "ListenerDescriptions": [ { "Listener": { "InstancePort": 80, "SSLCertificateId": "
ARN
", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTP" }, "PolicyNames": [ "my-SSLNegotiation-policy" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "HTTP", "InstanceProtocol": "HTTP" }, "PolicyNames": [] } ], ... } ] }
当您创建自定义安全策略时,必须至少启用一项协议和一个密码。DSA 和 RSA 密码特定于签名算法,用于创建 SSL 证书。如果您已有 SSL 证书,请确保启用用于创建证书的密码。您的自定义策略的名称不得以 ELBSecurityPolicy-
或 ELBSample-
开头,因为这些前缀是为预定义安全策略的名称保留的。
(可选)使用自定义 SSL 安全策略
-
使用 create-load-balancer-policy 命令通过自定义安全策略创建 SSL 协商策略。例如:
aws elb create-load-balancer-policy --load-balancer-name
my-loadbalancer
--policy-namemy-SSLNegotiation-policy
--policy-type-name SSLNegotiationPolicyType --policy-attributes AttributeName=Protocol-TLSv1.2,AttributeValue=true AttributeName=Protocol-TLSv1.1,AttributeValue=true AttributeName=DHE-RSA-AES256-SHA256,AttributeValue=true AttributeName=Server-Defined-Cipher-Order,AttributeValue=true -
(可选)使用以下 describe-load-balancer-policies 命令验证是否已创建策略:
aws elb describe-load-balancer-policies --load-balancer-name
my-loadbalancer
--policy-namemy-SSLNegotiation-policy
响应包括策略的描述。
-
使用以下 set-load-balancer-policies-of-listener 命令在负载均衡器端口 443 上启用策略:
aws elb set-load-balancer-policies-of-listener --load-balancer-name
my-loadbalancer
--load-balancer-port 443 --policy-namesmy-SSLNegotiation-policy
注意
set-load-balancer-policies-of-listener
命令将指定负载均衡器端口的当前策略集替换为指定的策略集。--policy-names
列表必须包括要启用的所有策略。如果您省略当前已启用的策略,则禁用此策略。 -
(可选)使用以下 describe-load-balancers 命令验证是否已启用策略:
aws elb describe-load-balancers --load-balancer-name
my-loadbalancer
以下是指明已在端口 443 上启用策略的响应示例。
{ "LoadBalancerDescriptions": [ { .... "ListenerDescriptions": [ { "Listener": { "InstancePort": 80, "SSLCertificateId": "
ARN
", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTP" }, "PolicyNames": [ "my-SSLNegotiation-policy" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "HTTP", "InstanceProtocol": "HTTP" }, "PolicyNames": [] } ], ... } ] }
步骤 3:配置后端实例身份验证(可选)
如果您在后端连接上设置 HTTPS/SSL,则可以选择设置实例身份验证。
在设置后端实例身份验证时,您将创建一个公钥策略。接下来,您可使用此公钥策略创建后端实例身份验证策略。最后,使用 HTTPS 协议的实例端口设置后端实例身份验证策略。
只有在实例提供给负载均衡器的公钥与负载均衡器的身份验证策略中的公钥匹配时,负载均衡器才会与实例通信。
配置后端实例身份验证
-
使用以下命令检索公钥:
openssl x509 -in
your X509 certificate PublicKey
-pubkey -noout -
使用以下 create-load-balancer-policy 命令创建公钥策略:
aws elb create-load-balancer-policy --load-balancer-name
my-loadbalancer
--policy-namemy-PublicKey-policy
\ --policy-type-name PublicKeyPolicyType --policy-attributes AttributeName=PublicKey,AttributeValue=MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw 3rrszlaEXAMPLE=
注意
要指定
--policy-attributes
的公钥值,请删除公钥的第一行和最后一行内容 (包含“-----BEGIN PUBLIC KEY-----
”和“-----END PUBLIC KEY-----
”的两行)。Amazon CLI 不允许--policy-attributes
中存在空格字符。 -
使用以下 create-load-balancer-policy 命令通过
my-PublicKey-policy
创建后端实例身份验证策略。aws elb create-load-balancer-policy --load-balancer-name
my-loadbalancer
--policy-namemy-authentication-policy
--policy-type-name BackendServerAuthenticationPolicyType --policy-attributes AttributeName=PublicKeyPolicyName,AttributeValue=my-PublicKey-policy
您可以选择使用多个公钥策略。负载均衡器会尝试所有密钥,一次尝试一个。如果实例提供的公钥与其中一个公钥匹配,则表示此实例已经过身份验证。
-
使用以下 set-load-balancer-policies-for-backend-server 命令将
my-authentication-policy
设置为 HTTPS 的实例端口。在此示例中,实例端口为端口 443。aws elb set-load-balancer-policies-for-backend-server --load-balancer-name
my-loadbalancer
--instance-port 443 --policy-namesmy-authentication-policy
-
(可选)使用以下 describe-load-balancer-policies 命令列出适用于您的负载均衡器的所有策略:
aws elb describe-load-balancer-policies --load-balancer-name
my-loadbalancer
-
(可选)使用以下 describe-load-balancer-policies 命令查看策略的详细信息:
aws elb describe-load-balancer-policies --load-balancer-name
my-loadbalancer
--policy-namesmy-authentication-policy
步骤 4:配置运行状况检查(可选)
Elastic Load Balancing 根据已配置的运行状况检查定期检查每个已注册 EC2 实例的运行状况。如果 Elastic Load Balancing 发现某一运行不正常的实例,它会停止向这个实例发送流量,并将流量路由到运行正常的实例。有关更多信息,请参阅 为您的经典负载均衡器配置运行状况检查。
当您创建负载均衡器时,Elastic Load Balancing 会使用运行状况检查的默认设置。如果您愿意,您可更改负载均衡器的运行状况检查配置,而不是使用默认设置。
为您的实例配置运行状况检查
使用以下 configure-health-check 命令:
aws elb configure-health-check --load-balancer-name
my-loadbalancer
--health-check Target=HTTP:80/ping,Interval=30,UnhealthyThreshold=2,HealthyThreshold=2,Timeout=3
以下为响应示例:
{
"HealthCheck": {
"HealthyThreshold": 2,
"Interval": 30,
"Target": "HTTP:80/ping",
"Timeout": 3,
"UnhealthyThreshold": 2
}
}
步骤 5:注册 EC2 实例
在创建负载均衡器之后,您必须向负载均衡器注册 EC2 实例。您可在负载均衡器所在的区域内的单个或多个可用区中选择 EC2 实例。有关更多信息,请参阅 经典负载均衡器的已注册实例。
使用 register-instances-with-load-balancer 命令,如下所示:
aws elb register-instances-with-load-balancer --load-balancer-name
my-loadbalancer
--instancesi-4f8cf126 i-0bb7ca62
以下为响应示例:
{
"Instances": [
{
"InstanceId": "i-4f8cf126"
},
{
"InstanceId": "i-0bb7ca62"
}
]
}
步骤 6:验证实例
当您的任何一个已注册实例处于 InService
状态后,您的负载均衡器即可使用。
要检查您的新注册的 EC2 实例的状态,请使用以下 describe-instance-health 命令:
aws elb describe-instance-health --load-balancer-name
my-loadbalancer
--instancesi-4f8cf126 i-0bb7ca62
以下为响应示例:
{
"InstanceStates": [
{
"InstanceId": "i-4f8cf126",
"ReasonCode": "N/A",
"State": "InService",
"Description": "N/A"
},
{
"InstanceId": "i-0bb7ca62",
"ReasonCode": "Instance",
"State": "OutOfService",
"Description": "Instance registration is still in progress"
}
]
}
如果实例的 State
字段为 OutOfService
,则可能是因为您的实例仍在注册中。有关更多信息,请参阅 对经典负载均衡器进行故障排除:实例注册。
在您的至少一个实例的状态为 InService
后,便可测试负载均衡器。要测试您的负载均衡器,请复制负载均衡器的 DNS 名称,然后将其粘贴到已连接 Internet 的 Web 浏览器的地址栏中。如果您的负载均衡器正在运行,您会看到 HTTP 服务器的默认页面。
步骤 7:删除您的负载均衡器(可选)
删除负载均衡器会自动注销其关联的 EC2 实例。当负载均衡器被删除之后,您便不再需要支付负载均衡器费用。不过,EC2 实例将继续运行,并且您仍需付费。
要删除您的负载均衡器,请使用以下 delete-load-balancer 命令:
aws elb delete-load-balancer --load-balancer-name
my-loadbalancer
要停止您的 EC2 实例,请使用 stop-instances 命令。要终止您的 EC2 实例,请使用 terminate-instances 命令。