无法通过AWS CloudFront连接EC2上WordPress站点的问题排查
问题排查与解决方案
核心问题原因
- CloudFront IP绑定逻辑错误:CloudFront是分布式CDN,边缘节点IP动态变化,且HTTPS访问依赖SNI(服务器名称指示)。直接通过
traceroute获取IP并绑定hosts的方式,会导致浏览器无法发送正确的SNI头,CloudFront无法匹配到你的分发配置,最终连接失败。 - WordPress站点URL不匹配:WordPress默认会硬编码站点URL,若未设置为CloudFront的自定义域名,会引发资源路径错误或跳转异常。
- CloudFront源/缓存配置疏漏:源协议策略、请求头转发设置不正确,导致请求无法正确传递到ELB和EC2实例。
分步解决方法
1. 修正hosts与CloudFront域名配置
- 确保CloudFront分发的**备用域名(CNAME)**已添加你测试用的自定义域名(如
dev.yourdomain.com) - 通过
nslookup [你的CloudFront分发域名]获取一个边缘节点IP,在hosts文件中绑定dev.yourdomain.com到该IP(仅用于测试,生产环境需配置DNS解析) - 确认CloudFront关联的ACM证书已覆盖该自定义域名
2. 调整CloudFront源与缓存行为
- 源协议策略:设置为
HTTPS only或Match viewer,确保CloudFront通过HTTPS访问后端ELB(ELB已部署ACM证书) - 请求头转发配置:
- 转发
Host头:选择Viewer request(若ELB已配置对应域名),或手动设置为ELB的域名作为自定义头,否则WordPress无法识别正确的主机名 - 开启
Cookie、Authorization头转发(在缓存行为中配置),保证WordPress会话功能正常
- 转发
3. 修正WordPress站点URL
- 后台修改:登录WordPress后台,在「设置-常规」中,将
WordPress地址(URL)和站点地址(URL)修改为CloudFront的自定义域名(如https://dev.yourdomain.com) - 后台无法访问时:修改EC2实例上的
wp-config.php文件,添加以下代码:
define('WP_HOME','https://dev.yourdomain.com'); define('WP_SITEURL','https://dev.yourdomain.com');
4. 验证安全组配置
- ELB安全组允许CloudFront边缘节点的HTTPS流量(测试阶段可临时开放0.0.0.0/0的443端口,生产环境需使用AWS官方发布的CloudFront IP地址范围)
- EC2实例安全组允许ELB所在安全组的HTTPS流量
测试流程
- 刷新CloudFront缓存:手动创建Invalidation,路径填写
/* - 清除本地浏览器缓存,访问自定义域名
- 若仍有问题,查看CloudFront访问日志,检查请求是否到达分发节点,以及转发到ELB时的错误码
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

