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

CloudFront+Elastic Beanstalk单实例环境部分API返回403/500求助

问题排查与解决方案

环境配置

  • Spring Boot后端部署在Elastic Beanstalk单实例环境(无负载均衡,仅支持HTTP协议),本身运行正常
  • CloudFront分发以该Elastic Beanstalk实例为源站,源站协议仅配置HTTP;已添加带有效SSL证书的自定义备用域名

核心问题

登录接口POST请求可正常返回结果,但后续带认证头的请求均返回500或403错误,响应头均包含x-cache: Error from cloudfront

排查线索

  1. 清除CloudFront缓存后,通过Swagger内嵌的CloudFront URL测试所有接口,全部正常
  2. 使用自定义域名访问时,仅登录接口可用
  3. 再次直接用CloudFront URL访问,仅登录接口正常,带认证头的请求失效

可能的原因及解决方法

1. CloudFront缓存策略与认证头冲突

CloudFront可能缓存了未携带认证头的请求状态,当后续带认证头的请求到达时,缓存的无认证状态导致权限验证失败。

  • 解决方法:
    • 调整CloudFront行为配置,将认证相关请求头(如Authorization)添加到缓存键排除列表,确保不同认证头的请求不会被统一缓存
    • 对需要认证的接口设置缓存策略为不缓存(TTL设为0),强制请求直达源站

2. CloudFront自定义域名HTTPS配置问题

自定义域名使用HTTPS但源站仅支持HTTP,协议转换过程中可能丢失或篡改认证头。

  • 解决方法:
    • 检查CloudFront行为的查看器协议策略,建议设置为Redirect HTTP to HTTPS
    • 确认源站协议策略设为HTTP only,确保CloudFront与源站通信协议正确,避免头信息被意外修改

3. Elastic Beanstalk会话/认证状态传递问题

源站本身正常,但CloudFront代理可能导致会话标识(如Cookie)无法正确传递或被缓存。

  • 解决方法:
    • 检查Spring Boot会话配置,确保会话Cookie的Secure、HttpOnly属性设置正确(HTTPS访问时Secure需设为true)
    • 在CloudFront行为中,将会话相关Cookie添加到白名单,确保其能正确转发到源站

4. CloudFront WAF规则拦截

WAF规则可能错误拦截了带认证头的请求。

  • 解决方法:
    • 检查CloudFront关联的WAF规则,排查是否有规则匹配到认证头格式(如特殊字符、长度限制)
    • 临时禁用WAF测试,确认是否为WAF导致的拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:06:22