使用Terraform在Azure配置域名流量重定向,解决VM访问异常问题
问题排查与修复方案
核心问题分析
从你的Terraform配置和访问症状来看,存在3个关键问题导致域名无法正常访问:
1. DNS记录不匹配
你创建的DNS A记录是appgateway.yourdomain12.com(配置中name = "appgateway"),但实际访问的是根域名yourdomain12.com,根域名没有对应的解析记录指向Application Gateway的公网IP,导致域名无法定位到正确的服务入口。
2. HTTPS重定向配置无效
你配置了HTTP到HTTPS的重定向规则,但Application Gateway未配置HTTPS所需的443前端端口、SSL证书和HTTPS监听器,重定向后没有对应的服务处理请求,直接引发访问失败。
3. 监听器Host Name限制
你的HTTP监听器指定了host_name = "yourdomain12.com",只有当请求的Host Header完全匹配该域名时才会触发路由。如果之前用IP能访问,说明当时监听器无Host Name限制,现在添加限制后需确保域名访问的Host Header正确传递。
修复后的Terraform配置修改
1. 添加根域名DNS解析记录
修改或新增根域名的A记录,让yourdomain12.com直接指向App Gateway的公网IP:
# 根域名A记录(若需保留子域名appgateway.yourdomain12.com,可保留原A记录并新增该记录) resource "azurerm_dns_a_record" "root" { name = "@" # "@"代表根域名 zone_name = azurerm_dns_zone.example.name resource_group_name = azurerm_resource_group.rg.name ttl = 300 records = [azurerm_public_ip.pip.ip_address] }
2. 移除无效的HTTPS重定向(或配置完整HTTPS)
如果暂时不需要HTTPS访问,先移除重定向配置,确保HTTP请求能正常路由:
resource "azurerm_application_gateway" "main" { # ... 其他原有配置保持不变 ... # 删除以下无效的重定向配置块 # redirect_configuration { # name="redirectHttpToHttps" # redirect_type = "Permanent" # target_listener_name = var.listener_name # target_url = "https://yourdomain12.com" # include_path = true # include_query_string = true # } # ... 其他原有配置保持不变 ... }
若需要HTTPS访问,需补充配置:
- 新增443前端端口
- 上传SSL证书到App Gateway
- 创建HTTPS监听器
- 配置对应路由规则绑定HTTPS监听器
3. (可选)支持IP和域名双访问
如果需要同时支持IP访问和域名访问,新增一个不带Host Name限制的HTTP监听器,并配置优先级更低的路由规则:
resource "azurerm_application_gateway" "main" { # ... 其他原有配置保持不变 ... # 新增无Host Name限制的HTTP监听器 http_listener { name = "ip-listener" frontend_ip_configuration_name = var.frontend_ip_configuration_name frontend_port_name = var.frontend_port_name protocol = "Http" # 不设置host_name,允许所有Host Header的请求 } # 新增对应路由规则,优先级设为2(低于域名监听器的规则) request_routing_rule { name = "ip-routing-rule" rule_type = "Basic" http_listener_name = "ip-listener" backend_address_pool_name = var.backend_address_pool_name backend_http_settings_name = var.http_setting_name priority = 2 } # ... 其他原有配置保持不变 ... }
额外排查步骤
- 验证DNS解析:执行
nslookup yourdomain12.com,确认返回的IP是App Gateway的公网IP。 - 检查Backend健康状态:在Azure Portal的Application Gateway中查看Backend Health,确认两台VM的状态为Healthy。
- 检查防火墙规则:确保VM的NSG允许来自App Gateway子网(10.21.0.0/24)的80端口流量。
内容的提问来源于stack exchange,提问作者Lekha
相关产品推荐
相关产品推荐

