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

Turbo用HTTP而非HTTPS致Symfony登录混合内容问题求助

问题分析与解决方案

核心原因

部署环境中,Nginx作为反向代理终止了HTTPS,后端的Caddy+FrankenPHP收到的始终是HTTP请求。Symfony默认不知道前端是通过HTTPS访问的,所以生成的登录表单action属性是http://domain/login,Turbo会严格遵循表单里的地址发起请求,从而触发混合内容拦截。

解决步骤

1. 配置Nginx转发HTTPS标识头

在Nginx的反向代理配置中,添加X-Forwarded-Proto头,告诉后端当前请求是通过HTTPS发起的:

location / {
    proxy_pass http://你的Caddy服务地址;
    # 关键头:标识前端协议为HTTPS
    proxy_set_header X-Forwarded-Proto https;
    # 补充其他必要的转发头
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header Host $host;
}

2. 让Symfony信任反向代理并识别HTTPS

修改Symfony的配置,让它信任Nginx的转发头:

  • 方式一:通过环境变量
    在.env(生产环境用.env.prod)中设置:
TRUSTED_PROXIES=127.0.0.1,你的Nginx服务器IP
TRUSTED_HEADERS=X-Forwarded-For,X-Forwarded-Host,X-Forwarded-Proto

如果是Docker环境,可设置为TRUSTED_PROXIES=0.0.0.0/0(注意生产环境仅在可信网络中使用)。

  • 方式二:通过框架配置文件
    编辑config/packages/framework.yaml:
framework:
    trusted_proxies: '%env(TRUSTED_PROXIES)%'
    trusted_headers: [X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Proto]

3. 验证修复效果

配置完成后,Symfony会根据X-Forwarded-Proto头生成HTTPS协议的表单action,Turbo自然会使用HTTPS提交请求,混合内容错误就会消失。

Turbo使用HTTP的原因

Turbo本身不会自主选择协议,它完全依赖页面中表单的action属性指定的地址。本地环境中Caddy直接以HTTPS运行,Symfony收到的是HTTPS请求,生成的action是HTTPS,所以行为正常;部署后Symfony没识别到HTTPS上下文,生成了HTTP的action,Turbo就按这个地址发起请求,导致错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:12:36