CloudFront行为未将流量转发至ELB的问题排查请求
CloudFront路径规则不匹配导致/cms/*请求路由到S3的问题排查与解决
核心问题分析
配置/cms/*行为指向ELB,但/cms/assets/img.jpg这类请求仍路由到S3返回404,且将ELB设为默认行为时正常,说明路径匹配的优先级或规则存在问题,而非HTTPS或源配置问题。
排查与修复步骤
1. 检查行为的优先级顺序
CloudFront按行为列表的从上到下顺序匹配路径,更具体的路径规则必须排在通用规则之前:
- 登录CloudFront控制台,进入目标分发的「行为」标签页
- 确认
/cms/*行为的位置在默认*行为的上方 - 如果顺序颠倒,拖动
/cms/*行为到*行为之前,保存并等待分发部署完成(通常15-30分钟)
2. 验证路径模式的正确性
确保/cms/*的路径模式符合CloudFront的匹配规则:
- 路径必须以
/开头,不能写成cms/*(缺少开头的斜杠会导致无法匹配/cms/xxx格式的请求) /*后缀表示匹配该路径下的所有子路径,符合/cms/assets/img.jpg这类请求的匹配需求
3. 排查路径改写或缓存策略干扰
检查/cms/*行为的「路径改写」配置:
- 如果设置了路径改写规则(比如将
/cms/*改写为/*),需确保改写逻辑不会影响路径的初始匹配(CloudFront是先匹配原始请求路径,再执行改写) - 确认缓存键配置未包含会干扰路径匹配的自定义参数(此情况概率较低,但可排除)
4. 确认分发已完成部署
修改行为配置后,CloudFront需要全局同步部署:
- 在分发列表中查看状态,当状态显示为「已部署」后再进行测试,避免因未生效的旧配置导致问题
5. 排除Lambda@Edge干扰(可选)
虽然你提到自定义Lambda不涉及当前问题,但需确认是否存在其他Lambda@Edge函数(比如请求触发型)修改了请求路径,导致原始路径无法匹配/cms/*规则。
验证方法
完成上述调整后,再次访问https://host.com/cms/assets/img.jpg,若请求正确路由到ELB,则问题解决。
内容的提问来源于stack exchange,提问作者Adrian Varysoo
相关产品推荐
相关产品推荐

