无法让CloudFront与动态PHP网站正常运行,求排查方案
明显配置错误分析
- 源域名循环解析:这是触发403错误的核心原因。你将CloudFront的源域名设置为
www.example.com,但Route53中www.example.com的A记录是CloudFront分发的ALIAS,导致CloudFront解析源时指向自身,根本无法连接到EC2实例,直接返回403错误,自然不会生成源访问日志。 - 潜在Host头匹配问题:当前源请求策略为
AllViewer,会将查看器的Host头(www.example.com)传递给源。后续修复源域名后,需确保Nginx配置允许该Host头的访问请求。
调试与修复步骤
1. 解决源域名循环问题
- 在Route53中新增一条A记录(例如
origin.example.com),指向EC2实例的公网IP。 - 修改CloudFront的源配置:将源域名改为
origin.example.com,保留HTTPS协议、端口443、最低SSL协议TLSv1.2的原有配置。 - 等待CloudFront分发更新完成(通常10-15分钟)后,重新测试访问。
2. 验证EC2安全组配置
- 确保EC2安全组允许CloudFront的IP段访问443端口。可通过AWS官方渠道获取CloudFront的IP范围,或临时开放所有HTTPS访问用于测试(后续再收紧规则)。
3. 确认Nginx配置兼容性
- 检查Nginx配置,确保
origin.example.com(或修改后的源域名)被允许作为Host头访问,同时保证www.example.com的请求能被正确处理(因为源请求策略会传递该Host头)。 - 验证Nginx的Let's Encrypt证书是否覆盖了新的源域名,或确认CloudFront信任Let's Encrypt颁发的证书(CloudFront默认信任公共CA证书,此步骤通常无需额外配置)。
4. 深挖CloudFront错误细节
- 使用
curl -v https://www.example.com命令访问,查看响应头中的X-Cache和X-Amz-Cf-Id字段,结合CloudFront实时监控面板获取更具体的错误信息。 - 修复循环问题后,再次检查CloudFront标准日志,确认是否生成源访问记录。
内容的提问来源于stack exchange,提问作者Stefan Gehrig
相关产品推荐
相关产品推荐

