如何配置ALB到后端IIS网站的HTTPS内部流量?
问题背景
我有一台运行IIS网站的Windows EC2实例,同时使用了应用程序负载均衡(ALB),当前AWS配置链路如下:
https://mywebsite.mydomain.com -> 应用程序负载均衡(ALB) -> 监听器(443端口) -> 目标组 -> Windows EC2实例(IIS)
我已在ALB上配置SSL证书,确保用户端请求均为HTTPS,但ALB到EC2实例的内部流量使用的是80端口(HTTP)。
我希望通过自签名证书将ALB到EC2的内部流量配置为HTTPS,已明确可创建自签名证书并在IIS中完成配置,但存在两个疑问:
- 目标组应使用什么方式转发流量到实例?是私有IP、机器名还是其他?
- 自签名证书的DNS名称应设置为多少?
附创建自签名证书的PowerShell代码:
$dnsname= "xxxxxx" $cert = New-SelfSignedCertificate -DnsName "$dnsname" -CertStoreLocation "cert:\LocalMachine\My"
以及目标组的Terraform配置:
resource "aws_lb_target_group" "https" { name = "my-tg-https" port = 443 protocol = "HTTPS" target_type = "instance" vpc_id = var.vpc_id deregistration_delay = var.deregistration_delay health_check { path = "/" interval = 30 healthy_threshold = 2 unhealthy_threshold = 2 timeout = 5 matcher = 200 port = 443 protocol = "HTTPS" } lifecycle { create_before_destroy = true } }
解答
1. 目标组的流量转发方式
你的Terraform配置中已将target_type设为"instance",这种模式下,目标组会直接通过EC2实例的私有IP转发流量。无需使用机器名:一方面ALB在VPC内部可直接通过私有IP访问实例,性能更稳定;另一方面无需依赖内部DNS解析,减少潜在故障点。
若后续考虑更灵活的部署(比如直接绑定ENI IP),可将target_type改为"ip"并指定实例私有IP,但当前instance类型已满足需求,无需修改。
2. 自签名证书的DNS名称设置
自签名证书的DNS名称需满足两个核心要求:与ALB访问EC2时使用的标识匹配、被ALB信任(需将证书导入ALB信任存储),推荐以下三种设置方式:
- 选项一:使用EC2实例的私有DNS名称(如
ip-10-0-1-100.ec2.internal,可在EC2控制台实例详情页查看)。无需额外配置内部DNS,直接复用AWS默认分配的私有域名即可。 - 选项二:使用内部自定义域名(若你有搭建内部DNS服务,可为实例配置专属内部域名并填入)。
- 选项三:使用实例私有IP地址(如
10.0.1.100)。但这种方式在实例IP变更时需重新生成证书,灵活性较差,仅适合IP固定的场景。
注意:无论选择哪种方式,都需要将生成的自签名证书导出(需包含私钥),并导入到ALB的信任存储中——ALB默认不信任自签名证书,不添加信任链会导致健康检查失败、流量无法正常转发。
额外配置注意事项
- 在IIS中绑定证书时,需确保绑定443端口,并选择你创建的自签名证书。
- 检查EC2实例的安全组规则,允许来自ALB所在安全组的443端口入站流量。
- 你的Terraform配置已将目标组端口、健康检查的协议和端口设为443/HTTPS,这部分配置正确,只需保证实例侧IIS与证书配置匹配即可。
内容的提问来源于stack exchange,提问作者LP13
相关产品推荐
相关产品推荐

