Cloudfront对接EC2混合PHP与静态内容时静态子目录返回502错误问题
故障原因
- 源站目录索引规则不匹配:CloudFront访问
/data路径时默认不会自动追加尾斜杠/,而LAMP栈中Apache的默认DirectorySlash规则如果未针对子目录单独开启,会无法自动定位到/data/index.html,返回错误被CloudFront转换为502。根路径的WordPress伪静态规则默认处理了尾斜杠重定向逻辑,所以访问正常。 - CloudFront回源Host头配置错误:如果回源时携带的Host头不是
mysite.com,源站虚拟主机配置会将请求路由到默认站点,默认站点无对应/data目录的访问权限,触发回源失败。 - 缓存行为优先级冲突:如果CloudFront配置了针对WordPress动态路径(比如
*.php)的缓存规则优先级高于/data/*规则,动态规则要求的Cookie转发、查询字符串转发逻辑会导致静态路径回源异常。 - 回源协议不匹配:如果CloudFront回源协议配置为HTTPS,但源站未配置对应子路径的HTTPS访问规则,或者SSL证书校验失败,也会触发502错误。
修复及优化方案
临时修复502问题
- 在Apache配置中针对
/data目录添加规则:DirectorySlash On,开启无尾斜杠路径的自动重定向;或者直接在CloudFront的/data/*缓存行为中设置默认根对象为index.html。 - 检查CloudFront源站配置,确保回源Host头设置为
mysite.com,而非EC2公网IP或默认源站域名。 - 统一回源协议为HTTP或HTTPS,避免混合配置导致的源站跳转异常。
长期最优配置方案
- 拆分缓存行为:单独为
/data/*路径配置更高优先级的缓存规则,设置缓存TTL为7~30天,关闭Cookie、查询字符串转发,仅允许GET、HEAD请求,大幅提升静态内容缓存命中率。 - 静态内容迁移:将
/data目录下的所有静态资源迁移到S3存储桶,配置CloudFront多源站规则,动态PHP内容回源到EC2,静态内容直接回源到S3,降低EC2负载的同时彻底规避源站子路径配置错误问题。 - 配置自定义错误响应:针对502、503错误设置10秒以内的重试缓存时间,避免源站临时波动导致的用户访问失败。
内容的提问来源于stack exchange,提问作者jtalarico
相关产品推荐
相关产品推荐

