在负载均衡(如 aws alb/nlb、阿里云 slb/clb)上接入 ssl 证书,核心做法是上传证书并绑定到监听器的 https 端口。通常需要在控制台创建或导入证书,然后在对应的监听器配置中启用 https 协议,选择已上传的证书,并将流量转发至后端服务器组。这样做后,客户端与负载均衡器之间的连接将加密,而负载均衡器到后端服务器的连接可根据需求保持 http 或 https。

如何上传和导入 SSL 证书
上传证书通常涉及生成密钥对、获取证书签发文件,并在负载均衡控制台的“证书管理”页面进行导入。以常见的云服务商为例,你需要准备 .pem 格式的公钥证书和 .key 格式的私钥。在控制台找到证书管理入口,选择“上传新证书”,填入证书名称,粘贴公钥和私钥内容,保存后即可在列表中使用。这一步确保了负载均衡器拥有解密客户端流量的能力。

import boto3
# 初始化 ACM 客户端 (AWS Certificate Manager)
acm_client = boto3.client('acm', region_name='us-east-1')
# 假设已有证书 ARN
certificate_arn = 'arn:aws:acm:us-east-1:123456789012:certificate/xxxx-xxxx-xxxx'
# 加载 ELBv2 客户端用于配置监听器
elbv2_client = boto3.client('elbv2')
# 更新监听器,绑定 SSL 证书
response = elbv2_client.modify_listener(
ListenerArn='arn:aws:elasticloadbalancing:us-east-1:123456789012:listener/app/my-alb/xxxx/xxxx',
Port=443,
Protocol='HTTPS',
SslPolicy='ELBSecurityPolicy-TLS-1-2-2017-01',
Certificates=[
{
'CertificateArn': certificate_arn
}
],
DefaultActions=[
{
'Type': 'forward',
'TargetGroupArn': 'arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/xxxx'
}
]
)
print("Listener updated successfully with SSL certificate.")
监听器如何配置 HTTPS 转发规则
配置监听器时,需将协议从 HTTP 更改为 HTTPS,并指定端口(通常为 443)。同时,必须关联之前上传的证书。如果需要进行基于域名或路径的路由,可以添加主机规则或路径规则。负载均衡器会终止 SSL 连接,解密请求后根据规则转发给后端。若后端服务也需要加密,可开启“SSL 透传”或将后端协议也设为 HTTPS,此时需在负载均衡器信任后端证书或关闭后端证书验证。

# 伪代码示例:配置 Nginx 作为后端时的 SSL 透传配置
# 注意:这仅是后端 Nginx 配置片段,实际 SSL 终止在 LB 层
server {
listen 80;
server_name example.com;
# 如果 LB 透传 TCP,Nginx 需监听 443 并处理 SSL
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://backend_app;
# 确保传递原始 Host 和 X-Forwarded-Proto
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
当后端服务器返回 502 错误时如何排查 SSL 问题
当后端服务器返回 502 Bad Gateway 时,可能是由于负载均衡器与后端之间的协议不匹配或 SSL 握手失败。首先检查后端服务是否正常运行且监听正确端口。其次,确认负载均衡器的健康检查协议是否与后端一致。如果后端使用 HTTPS,负载均衡器的健康检查也应使用 HTTPS 并信任后端证书。此外,检查后端应用的日志,看是否有 SSL 握手错误或证书过期信息。确保后端证书的域名与请求的 Host 匹配,避免因证书名称不匹配导致的连接拒绝。


















