Api Platform集成Caddy时如何允许HTTP访问且保留Mercure配置
解决步骤
1. 优先排除本地缓存干扰
很多时候重定向是浏览器本地HSTS缓存导致的,和Caddy配置无关,先通过命令行测试确认真实响应:
curl -v http://localhost
如果返回状态码是200,说明配置已经生效,清理浏览器缓存/开启无痕模式即可正常访问。
2. 针对不同需求修改Caddyfile配置
所有Mercure相关配置完全保留,仅修改开头的全局块和站点声明块即可:
场景A:完全关闭HTTPS,仅允许HTTP访问
{ # 新增这行,完全关闭自动HTTPS功能 auto_https off {$DEBUG} servers { protocol { experimental_http3 } } } # 修改站点声明,强制走HTTP协议监听80端口 http://{$SERVER_NAME}:80 # 后续的log、@pwa匹配、route块(含mercure配置)完全保留原内容即可
场景B:同时保留HTTP和HTTPS访问,关闭自动重定向
{ # 新增这行,仅关闭HTTP转HTTPS的自动重定向,HTTPS服务仍正常运行 auto_https disable_redirects {$DEBUG} servers { protocol { experimental_http3 } } } # 站点声明可以保留原{$SERVER_NAME}不变 {$SERVER_NAME} # 后续所有配置完全保留原内容即可
3. 清理旧配置残留并重启服务
Caddy会把证书、运行配置持久化在caddy_data、caddy_config卷中,修改配置后必须清理旧卷才能生效:
# 停止容器并删除关联卷(开发环境无风险,生产环境请先备份重要数据) docker compose down -v # 重建并启动容器 docker compose up -d --build
之前配置不生效的核心原因
- 未清理Caddy持久化卷,旧的配置和证书残留,新修改的配置没有实际加载
- 浏览器HSTS缓存了之前的重定向规则,导致即使服务端配置生效,浏览器依然自动跳转HTTPS
- 站点声明没有显式指定
http://前缀,Caddy默认对匹配的域名启用自动HTTPS逻辑
内容的提问来源于stack exchange,提问作者Lenny4
相关产品推荐
相关产品推荐

