Docker环境下Shopware 6 Webpack热重载502错误求助
解决Docker+Nginx环境下Shopware 6热代理502问题
核心问题分析
热代理默认监听localhost,容器内的服务仅能被自身访问,Nginx作为反向代理从容器网络发起请求时会被拒绝,这就是控制台出现Rejecting request提示的原因。同时Nginx代理配置缺少必要的请求头,也会导致请求异常。
具体修复步骤
1. 修改热代理监听地址
启动热代理时,指定绑定到容器的所有网卡(0.0.0.0),让容器外的服务(包括Nginx)能正常访问:
./bin/watch-storefront.sh --host 0.0.0.0
也可以在Shopware的.env文件中添加全局配置,避免每次启动都加参数:
WEBPACK_DEV_SERVER_HOST=0.0.0.0
2. 优化Nginx代理配置
在热代理对应的server块中添加必要的代理头,同时支持WebSocket(热重载依赖该协议):
server { listen 9998; listen [::]:9998; # 如需HTTPS访问,添加证书配置(替换为你的证书路径) # listen 9998 ssl; # ssl_certificate /etc/nginx/certs/localhost.crt; # ssl_certificate_key /etc/nginx/certs/localhost.key; location / { proxy_pass http://naturanum_app:9998; # 传递请求头确保服务端正确识别请求来源 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 支持WebSocket协议 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
注意:如果Nginx容器和应用容器不在同一Docker网络,需确保naturanum_app能被正确解析,或直接替换为应用容器的IP地址。
3. 验证容器网络与端口映射
- 确认
docker-compose.yml中应用容器的9998端口映射正确:
services: naturanum_app: ports: - "9998:9998" # 其他端口配置...
- 确保Nginx容器和应用容器处于同一Docker网络,否则Nginx无法通过容器名访问应用服务:
networks: shopware-network: driver: bridge services: naturanum_app: networks: - shopware-network nginx: networks: - shopware-network
4. 重启服务验证
- 重启Nginx容器加载新配置:
docker-compose restart nginx
- 重新启动热代理(若已配置
.env则无需额外参数):
./bin/watch-storefront.sh
- 访问
http://localhost:9998(或配置的HTTPS地址),此时应能正常加载页面,修改主题文件后会自动触发热重载。
内容的提问来源于stack exchange,提问作者metallike
相关产品推荐
相关产品推荐

