Shopware 6配置反向代理后出现混合内容错误求助
解决Shopware 6在Caddy反向代理下的混合内容错误
问题背景
在AlmaLinux 9虚拟服务器上部署Docker容器集群(Caddy、PHP、MySQL、phpMyAdmin)运行Shopware 6,添加前端Caddy反向代理后出现混合内容错误。域名已正确绑定DNS,单独运行后端集群时功能正常,调整Shopware .env参数后问题仍存在。
修复步骤
1. 调整后端Caddy配置
修改/srv/lcmp/caddy_docker/Caddyfile,确保传递正确的请求头给PHP:
:80 { encode gzip zstd root * /var/www/html/public # 自动传递客户端真实请求头 forwarded php_fastcgi php:9000 { # 明确告知PHP当前使用HTTPS协议 env HTTPS on } file_server header { -server -Link -X-Powered-By # enable HSTS Strict-Transport-Security max-age=31536000; # disable clients from sniffing the media type X-Content-Type-Options nosniff # clickjacking protection X-Frame-Options DENY # keep referrer data off of HTTP connections Referrer-Policy no-referrer-when-downgrade } }
2. 更新Shopware环境变量
修改/srv/lcmp/www/.env.local,调整以下关键参数:
APP_URL=https://vanill.at STOREFRONT_PROXY_URL=https://vanill.at # 生产环境建议指定代理IP(如192.168.160.2),测试阶段可使用* TRUSTED_PROXIES=* TRUSTED_DOMAINS=vanill.at,www.vanill.at TRUSTED_HEADERS=["x-forwarded-for", "x-forwarded-host", "x-forwarded-proto", "x-forwarded-port", "x-forwarded-prefix"]
同时修改/srv/lcmp/www/.env中的STOREFRONT_PROXY_URL为https://vanill.at,覆盖默认HTTP配置。
3. 清除Shopware缓存
进入PHP容器执行缓存清理命令:
docker exec -it lcmp-php-1 bash cd /var/www/html bin/console cache:clear --env=prod bin/console cache:warmup --env=prod
4. 重启容器
重启后端Caddy和PHP容器使配置生效:
cd /srv/lcmp docker-compose restart caddy php
关键说明
- 混合内容错误的核心原因是Shopware未识别到当前请求为HTTPS,导致生成HTTP链接。通过传递
X-Forwarded-Proto头并配置TRUSTED_PROXIES,可以让Shopware正确判断请求协议。 - 前端Caddy反向代理(caddy-docker-proxy)会自动传递必要的代理头,后端Caddy需通过
forwarded指令接收并转发给PHP。 - 生产环境中,
TRUSTED_PROXIES应指定前端代理的具体IP,避免使用*以提升安全性。
内容的提问来源于stack exchange,提问作者vorpXuser
相关产品推荐
相关产品推荐

