You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多源站AWS Cloudfront如何区分不同源返回的403、404错误并分别处理

解决方案

核心结论

Cloudfront 原生不支持全局维度按源站区分自定义错误页,你当前的问题来自全局自定义错误规则会拦截所有源站返回的403/404错误。不需要重构现有架构,调整Cloudfront配置即可解决问题。

最优调整方案(推荐)

目前Cloudfront已支持按单个缓存行为配置独立的自定义错误规则,操作步骤如下:

  1. 进入你的Cloudfront分发配置页,删除「自定义错误页」标签下全局生效的403、404错误规则
  2. 切换到「行为」标签页,编辑匹配默认路径*、关联S3源站的缓存行为:
    • 下拉找到「自定义错误响应」板块,新增两条规则:
      • 错误码选403,自定义响应码设为200,响应页路径填/index.html,缓存TTL按你的需求设置即可
      • 错误码选404,自定义响应码设为200,响应页路径填/index.html
    • 保存该行为的配置
  3. 确认匹配路径/api/*、关联ELB源站的缓存行为,没有配置任何自定义错误响应规则(默认透传源站所有响应)
  4. 保存整个分发配置,等待Cloudfront部署生效(通常5-15分钟)

配置完成后即可实现预期效果:

  • 访问前端路径命中默认行为时,S3返回的403/404会被拦截为200返回index.html,由React Router处理路由
  • 访问/api/*前缀的接口时,后端返回的所有错误码都会直接透传给前端,不会被拦截修改

备选方案(兼容旧版Cloudfront分发)

如果你使用的是非常早期不支持行为级自定义错误配置的Cloudfront分发,可以通过调整S3侧配置实现同等效果:

  1. 删除Cloudfront全局的403、404自定义错误页规则
  2. 进入S3 Bucket的「静态网站托管」配置,添加自定义错误规则:
    • 403、404错误均返回200状态码,响应对象为/index.html
  3. 确认Cloudfront关联的S3源站使用的是S3静态网站端点(格式为bucket-name.s3-website-region.amazonaws.com),而非S3 REST API端点,否则S3的自定义错误规则不会生效

内容的提问来源于stack exchange,提问作者pantaphobic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:45:03