Shopware 6.4.12.0版本SSL卸载故障及配置方法咨询
版本行为确认
该现象确实是6.4.12.0版本调整默认安全策略导致的,不属于部署操作失误。
从6.4.12.0版本开始,Shopware收紧了底层Symfony框架的可信代理默认规则:旧版本默认信任所有代理传递的X-Forwarded-*系列请求头,新版本默认不信任任何外部代理透传的协议、主机码头,即使APP_URL设置为HTTPS地址,只要应用侧收到的是Apache转发的HTTP明文请求,生成所有资源、路由链接时都会默认使用HTTP协议,最终出现后台加载HTTP资源的跨协议报错。
Traefik终止SSL场景的正确配置步骤
针对Traefik做SSL终止、Apache作为容器内Web服务器的架构,按以下顺序配置即可修复问题:
第一步:配置Shopware可信代理规则
在项目根目录的.env文件中新增以下配置,替换原有相关参数:# 信任本地回环、当前请求来源IP,适配Docker动态内网网段,CI环境无需硬编码固定IP TRUSTED_PROXIES=127.0.0.1,REMOTE_ADDR # 限制可信访问域名,规避主机头攻击风险 TRUSTED_HOSTS=^example\.com$如果部署环境的Docker网络使用固定网段,也可以直接把Traefik服务所在的CIDR网段加到
TRUSTED_PROXIES列表中,多个值用逗号分隔即可。第二步:调整Apache透传协议头配置
6.4.12.0版本默认的.htaccess规则移除了自动从反向代理头识别HTTPS状态的逻辑,需要手动在Apache虚拟主机配置或者项目根目录.htaccess中补充规则(提前确认Apache已启用mod_headers、mod_setenvif模块):# 识别Traefik传递的HTTPS协议标识,传递给PHP解析层 SetEnvIf X-Forwarded-Proto "^https$" HTTPS=on RequestHeader set X-Forwarded-Proto expr=%{reqenv:X-Forwarded-Proto} RequestHeader set X-Forwarded-Host expr=%{reqenv:X-Forwarded-Host}这一步配置完成后,PHP侧的
$_SERVER['HTTPS']参数会在HTTPS访问时正确返回on值,Shopware生成链接时会自动使用HTTPS前缀。第三步:校验Traefik转发规则
确认Traefik到Shopware容器的路由配置中,没有手动覆盖X-Forwarded-Proto、X-Forwarded-Host头。Traefik默认会自动透传这类请求头,不需要额外添加配置,只要不存在强制把X-Forwarded-Proto设为http的错误规则即可。第四步:清理配置缓存
进入Shopware项目根目录执行命令清理缓存,让新配置生效:bin/console cache:clear # 生产环境执行完清理后补充执行缓存预热 bin/console cache:warmup
注意:不要通过修改核心代码、硬写静态资源HTTPS路径的方式修复问题,这类修改会在后续版本升级时被覆盖。上述配置是Shopware官方推荐的反向代理SSL终止标准方案,兼容后续6.4.x、6.5.x系列版本升级。
配置完成后重新访问管理后台,所有资源链接都会自动生成HTTPS地址,不会再出现跨协议加载失败的问题。
内容的提问来源于stack exchange,提问作者Alex

