为了解决此问题,可以在负载均衡器前使用 HTTPS 协议监听器,并配置 HTTP 到 HTTPS 重定向。这样可以确保所有浏览器请求都是加密的。以下是一个使用 AWS CLI 创建负载均衡器的例子:
aws elbv2 create-load-balancer --name my-load-balancer --subnets subnet-1234567890abcdef0 subnet-0987654321abcdef0 --security-groups sg-1234567890abcdef0 --scheme internet-facing --type application
然后为负载均衡器添加 HTTPS 协议监听器。假设我们已经有了一个 ACM 证书,证书 ARN 为 arn:aws:acm:us-west-2:123456789012:certificate/12345678-1234-1234-1234-123456789012,则可以使用以下命令添加 HTTPS 协议监听器:
aws elbv2 create-listener --load-balancer-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/1234567890abcdef --protocol HTTPS --port 443 --ssl-policy ELBSecurityPolicy-2016-08 --certificates CertificateArn=arn:aws:acm:us-west-2:123456789012:certificate/12345678-1234-1234-1234-123456789012
最后,配置 HTTP 到 HTTPS 重定向:
aws elbv2 create-rule --listener-arn arn:aws:elasticloadbalancing:us-west-2:123456789012:listener/app/my-load-balancer/1234567890abcdef/1234567890abcdef --priority 1 --conditions Field=host-header,Values=my.example.com --redirect-action Type=redirect,RedirectConfig={Protocol=HTTPS,Port=443,StatusCode=HTTP_301}
这里的 host-header 字段需要根据实际情况进行修改。此时,所有 HTTP 请求都会被重定向到 HTTPS。