AWS CloudFront修改Strapi响应头导致特定路由返回404问题咨询
根因说明
- CloudFront默认缓存行为仅转发预设的白名单请求头,Strapi的
/content-manager/*、/admin/*、/i18n/*三类管理侧接口强依赖Authorization(登录鉴权凭证)、Accept(指定响应格式为JSON)两个请求头,默认配置下这两个头不会被转发到源站ALB。 - 缺失
Authorization头时,Strapi会判定请求未登录,出于安全隐藏内部接口的策略,直接返回404而非鉴权失败状态码;缺失Accept头时Strapi会默认返回text/plain格式的错误响应,和你观测到的返回特征完全匹配。 - 放行所有请求头的临时方案会大幅降低CloudFront缓存命中率,还存在敏感请求头、登录态被缓存的安全风险,不建议长期使用。
最优配置方案
- 针对管理侧动态接口单独创建CloudFront行为规则,路径匹配规则填写
/admin/*、/content-manager/*、/i18n/*,规则优先级高于静态资源规则:- 请求头转发配置:选择「包含指定请求头」,仅添加
Authorization、Accept、Origin三个必填头即可 - 缓存配置:因为该类接口均为用户登录后的动态请求,直接将最小/最大/默认TTL全部设置为0,关闭缓存,避免出现登录态串号、内容更新不及时的问题
- 查询字符串配置:转发所有查询字符串
- Cookie配置:若Strapi未启用Cookie存储登录态,可关闭Cookie转发,否则仅转发登录相关的Cookie键即可
- 请求头转发配置:选择「包含指定请求头」,仅添加
- 针对
/uploads/*、/plugins/*、/admin/assets/*等静态资源路径,保留默认缓存策略即可,不需要转发额外请求头,保证缓存命中率。 - 额外校验:确认CloudFront回源协议和ALB监听协议一致,避免协议不匹配导致的请求异常。
内容的提问来源于stack exchange,提问作者kutya
相关产品推荐
相关产品推荐

