caddy默认启用自动https,检测到域名已存在acme记录时,会主动将http请求301重定向至https;仅设server_name=:80不关闭该机制,须显式配置auto_https=off或移除tls指令才能禁用跳转。

SERVER_NAME=:80 但访问 http://localhost 仍跳 443?
根本原因不是 FrankenPHP 跳转,而是 Caddy 自动 HTTPS 机制在起作用——它检测到请求来自 :80,但发现域名(比如 localhost 或 yoursite.com)已在 ACME 记录中存在,就主动发起 301 重定向到 :443。你改了端口但没关自动 HTTPS,Caddy 就会继续按“有证书的域名”逻辑处理。
实操要点:
-
SERVER_NAME=:80只禁用域名匹配和证书申请,不关闭自动 HTTPS 重定向;要彻底禁用,必须加AUTO_HTTPS=off环境变量 - 若用自定义
Caddyfile,里面不能有https://或tls块,否则 Caddy 会尝试启用 TLS 并触发跳转 - 检查是否误配了
reverse_proxy:比如前端 Nginx 或 Cloudflare 开了「强制 HTTPS」,而 FrankenPHP 容器内仍是 HTTP,就会形成循环跳转 - 用
curl -I http://localhost:8080看响应头,如果出现Location: https://localhost:8080/,说明是 Caddy 的自动跳转;如果是Location: https://localhost/,大概率是 CDN 或反向代理层加的
docker run 时端口映射和 SERVER_NAME 不一致导致跳转错乱
常见错误是 SERVER_NAME=:8080 却只写 -p 8080:80——容器内 Caddy 监听 :8080,但 Docker 把宿主机 8080 转发到了容器的 :80,结果 Caddy 实际没收到请求,反而 fallback 到默认行为(比如监听 :443 或触发 ACME)。
正确配对方式只有两种:
-
SERVER_NAME=:80+-p 80:80(宿主机 80 → 容器 80) -
SERVER_NAME=:8080+-p 8080:8080(宿主机 8080 → 容器 8080)
混搭会导致 $_SERVER['HTTP_HOST'] 变成 localhost:8080,某些框架(如 Laravel)会据此生成错误的 APP_URL,间接引发跳转异常。
为什么加了 AUTO_HTTPS=off 还跳 443?
因为 Caddy 的自动 HTTPS 是全局开关,但它的生效前提是「没有显式配置 TLS」。如果你挂载了自定义 Caddyfile,且里面写了 tls internal 或 tls your.crt your.key,AUTO_HTTPS=off 就完全失效——Caddy 会直接启用该 TLS 配置,并可能把 :80 请求重定向过去。
排查建议:
- 删掉所有自定义
Caddyfile,只靠环境变量启动,确认是否还跳 - 查看容器日志:
docker logs <container></container>,搜索automatic https或redirecting关键字 - 临时进容器执行:
ps aux | grep caddy,看启动命令里是否含--auto-https off(FrankenPHP 会把AUTO_HTTPS=off转为该参数)
本地开发用 :4433 跑 HTTPS 却被跳到 :443
这是 Caddy 的端口标准化行为:当你访问 https://localhost:4433,Caddy 内部仍认为这是「HTTPS 流量」,若配置中没明确限定监听地址,它可能把重定向目标设为标准端口 :443,而非你实际用的 :4433。
解决办法很直接:
- 在
Caddyfile的 HTTPS server 块里,显式写listen :4433 - 或改用
SERVER_NAME=localhost:4433+AUTO_HTTPS=off,彻底绕过自动逻辑 - 别依赖浏览器地址栏输错端口来“测试”,用
curl -vk https://localhost:4433看真实响应头更准
最易被忽略的一点:FrankenPHP 启动后,Caddy 的行为几乎完全由环境变量和 Caddyfile 共同决定,但环境变量优先级更高;一旦你设了 SERVER_NAME,Caddyfile 里的域名块就失效——这意味着你不能一边用 SERVER_NAME=:80,一边指望 Caddyfile 里写个 example.com { redir https://... } 来控制跳转,它压根不会加载那部分配置。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











