必须为每个正式域名配置独立 server 块,确保 DNS 解析到位、80/443 端口开放、ACME 证书自动申请成功三者缺一不可;共用块会导致 root 错乱和 PHP 执行污染。

正式域名必须在 Caddyfile 中用独立 server 块声明,且需确保 DNS 解析、端口开放、证书自动申请三者全部就位,缺一不可。
域名必须单独写 server 块,不能合并在一个块里
FrankenPHP 的路由隔离靠的是 Caddyfile 的 server 块作用域,不是靠虚拟主机配置。多个域名共用一个块会导致 root 路径错乱、PHP 执行范围污染。
- 错误写法:
example.com, www.example.com { root /var/www/app/public php_server }—— 两个域名共享同一目录,www子域名无法独立部署 - 正确写法:为每个域名(含
www和非www)各写一个块,例如:example.com { root * /var/www/app/public php_server } www.example.com { root * /var/www/app/public php_server } - 如果想统一管理,可用通配符:
*.example.com,但注意 Let’s Encrypt 对泛域名证书要求 DNS-01 验证,不支持 HTTP-01
Caddyfile 中的域名必须和 DNS 解析、证书申请目标完全一致
ACME 自动申请证书时,Caddy 会严格比对 server_name(即 server 块首行域名)与证书的 Subject Alternative Name(SAN)。不一致就会 fallback 到自签名证书或握手失败。
- 你填了
example.com,但 DNS 只解析了www.example.com→ 挑战失败,日志出现HTTP-01 challenge failed - 你填了
www.example.com,但用户常访问example.com→ 后者无证书,浏览器报NET::ERR_CERT_COMMON_NAME_INVALID - 解决方法:在
server块中显式列出所有常用入口:example.com www.example.com,Caddy 会为它们一并申请证书
必须开放 80 和 443 端口,且 80 端口不能被 CDN 或防火墙拦截
Caddy 的 ACME 流程依赖 80 端口做 HTTP-01 挑战。哪怕你只想要 HTTPS,80 端口也必须可被公网访问——否则证书根本拿不到。
立即学习“PHP免费学习笔记(深入)”;
- 云服务器要检查安全组:放行 TCP 80/443
- 本地测试或内网部署时,不要强求 HTTPS;用
SERVER_NAME=:80启动纯 HTTP 模式更实际 - 如果用了 Cloudflare / CDN,务必关闭其「Always Use HTTPS」和「Automatic HTTPS Rewrites」,否则和 Caddy 的 301 跳转叠加,触发
ERR_TOO_MANY_REDIRECTS - 验证方式:
curl -I http://example.com应返回 301 +Location: https://...,且只有一次跳转
HTTPS 生效后,PHP 应用里必须同步更新 URL 配置
FrankenPHP 终止 TLS 后,请求以明文进 PHP,但应用仍需知道自己跑在 HTTPS 上,否则生成的链接、重定向、Cookie 标志全会出错。
- WordPress:进后台「设置 → 常规」,把「WordPress 地址」和「站点地址」都改成
https://example.com;或直接改wp-config.php,加:define('WP_HOME', 'https://example.com'); define('WP_SITEURL', 'https://example.com'); - Laravel:确保
.env中APP_URL=https://example.com,且config/app.php中'url' => env('APP_URL', 'https://example.com') - 所有框架都应检查
$_SERVER['HTTPS']是否为on;FrankenPHP 默认设对,但若中间加了反向代理,可能需要手动补:fastcgi_param HTTPS on;(不过 FrankenPHP 不走 fastcgi,此条仅作对比提醒)
最容易被忽略的是 DNS 解析延迟和本地缓存——改完 DNS 后等 5 分钟再试,别急着查 Caddy 日志;用 dig example.com 和 curl -v https://example.com 看底层连接细节,比刷网页更准。



















