Windows WSL2+Docker环境下API Platform的Caddy无法访问PWA问题
WSL2环境下API Platform PWA无法访问解决方案
根因说明
该问题由WSL2端口映射异常、Mercure鉴权校验失败、静态资源挂载权限三个问题叠加导致,和本地SSL证书信任无关,你提供的Caddy日志中400错误对应的就是Mercure接口鉴权失败。
解决步骤
1. 修复WSL2端口映射残留
- 关闭当前运行的容器:
docker compose down - 在Windows终端执行命令重启WSL,清除残留端口映射:
wsl --shutdown - 重启后打开Docker Desktop设置,确认「WSL集成」页中你使用的Ubuntu发行版开关已开启
2. 修改Caddy配置跳过本地Mercure鉴权
找到项目根目录下的caddy/Caddyfile文件,替换Mercure和PWA路由配置段为以下内容,原有其他配置保持不变:
localhost { # 适配WSL2的Mercure请求自动补全鉴权头 @mercure path /.well-known/mercure reverse_proxy @mercure mercure:80 { header_up X-Forwarded-For {remote_host} header_up Authorization "Bearer {env.MERCURE_JWT_TOKEN}" } # PWA站点路由 route / { root * /srv/pwa/build try_files {path} {path}/ /index.html file_server } # Admin后台路由 route /admin/* { root * /srv/admin/build try_files {path} {path}/ /admin/index.html file_server } # 原有API文档相关配置保持不变 }
3. 修复静态资源挂载问题
- 确保整个项目源码存放在WSL2的Ubuntu文件系统内(路径形如
/home/你的用户名/项目名),不要放在Windows的/mnt/c挂载盘下,挂载盘的权限限制会导致Caddy无法读取PWA打包后的静态资源 - 删除原有容器卷避免缓存影响:
docker compose down -v - 重新构建启动容器:
docker compose up --build
4. 可选:解决本地证书不信任问题
Chrome浏览器访问chrome://flags/#allow-insecure-localhost,将该选项设置为Enabled后重启浏览器,即可消除本地HTTPS证书不受信任的提示。
验证
容器启动完成后访问https://localhost即可正常打开PWA站点,https://localhost/admin可正常加载后台,https://localhost/docs接口文档也可正常访问。
内容的提问来源于stack exchange,提问作者Navalex
相关产品推荐
相关产品推荐

