Laravel XHR请求因混合内容被拦截,ALB相关问题排查求助
解决混合内容问题的ALB/CloudFlare配置方案
问题根源
Laravel应用未正确识别外部的HTTPS请求——ALB和CloudFlare作为反向代理,会以HTTP协议将请求转发给后端应用,若应用未信任这些代理传递的请求头,就会生成HTTP而非HTTPS的XHR请求链接。
Amazon ALB配置调整
- 确保ALB向后端转发
X-Forwarded-Proto和X-Forwarded-For头:- 若使用AWS Load Balancer Controller管理EKS Ingress,给Ingress资源添加以下annotations:
alb.ingress.kubernetes.io/backend-protocol: HTTP alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]' alb.ingress.kubernetes.io/ssl-redirect: '443' alb.ingress.kubernetes.io/forward-headers: "X-Forwarded-Proto,X-Forwarded-For" - 检查目标组属性:确认“转发客户端IP”已启用,保证代理头能正确传递到后端Pod。
- 若使用AWS Load Balancer Controller管理EKS Ingress,给Ingress资源添加以下annotations:
CloudFlare配置调整
- 强制全站HTTPS:在SSL/TLS > Edge Certificates中开启始终使用HTTPS和自动HTTPS重定向,确保所有用户请求都以HTTPS发起。
- 调整SSL模式:将SSL/TLS > Overview中的SSL模式设置为完全或严格(避免用“灵活”模式,该模式下CloudFlare到ALB的请求为HTTP,会导致ALB传递的
X-Forwarded-Proto为HTTP)。 - 确认头转发:在Network设置中开启HTTP/2,CloudFlare默认会转发
X-Forwarded-Proto头,无需额外过滤。
Laravel辅助配置(关键)
应用运行在代理之后,需让Laravel信任ALB和CloudFlare的代理请求:
- 在
.env中添加:
(生产环境建议替换为ALB和CloudFlare的具体IP段,提升安全性)TRUSTED_PROXIES=* - 确保
config/trustedproxy.php中配置正确的代理头:
这会让Laravel优先使用'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,X-Forwarded-Proto头判断请求协议,从而生成HTTPS链接。
内容的提问来源于stack exchange,提问作者Obada Qafisheh
相关产品推荐
相关产品推荐

