访问绑定CloudFront的example.com跳转至EC2公网DNS问题求助
结论
这是CloudFront配置问题,和Apache配置无关。
根因定位
你提供的两个关键现象已经可以直接定位问题范围:
- 直接访问EC2弹性IP不会触发跳转,说明Apache本身的服务逻辑正常
- 访问CloudFront分配的自带域名、你绑定的自定义域名都会触发到EC2公网域名的跳转,说明问题出在CloudFront向源站转发请求的环节
具体触发逻辑:
默认CloudFront向源站转发请求时,携带的Host请求头为你填写的源站域名ec.xxxxxx.amazonaws.com。Apache处理目录类请求(如/phpmyadmin缺末尾/)、WordPress初始化生成跳转链接时,都会读取请求中的Host头拼接跳转地址,最终就会返回跳转到EC2公网域名的响应。
修复方案
无需调整Apache配置,仅修改CloudFront源站请求策略即可:
- 打开CloudFront控制台,进入对应分发的「源和源组」配置页
- 编辑绑定的EC2源站,找到「源请求策略」配置项
- 两种配置可选:
- 直接使用AWS官方托管的
Managed-AllViewer策略,该策略会将用户端请求的所有头(包含Host头)原样传递给源站 - 自定义源请求策略,仅在允许传递的头列表中添加
Host头即可
- 直接使用AWS官方托管的
- 保存配置后等待CloudFront分发生效(通常需要5~10分钟),清理浏览器缓存后测试即可。
验证方法
你可以在EC2本地执行curl命令直接验证逻辑:
- 执行
curl -v -H "Host: ec.xxxxxx.amazonaws.com" http://EC2弹性IP/phpmyadmin,可以看到返回的301响应的Location头为EC2公网域名的跳转地址,和你遇到的现象完全一致 - 执行
curl -v -H "Host: example.com" http://EC2弹性IP/phpmyadmin,返回的跳转地址为example.com域名的地址,可验证判断正确。
内容的提问来源于stack exchange,提问作者abhig10
相关产品推荐
相关产品推荐

