caddyfile必须放在项目根目录,启动时需cd至此目录再执行./frankenphp;最简配置含全局frankenphp块和localhost站点块,指定root与php_server。

FrankenPHP 安装后,Caddyfile 是它启动和路由的核心配置文件。它不依赖额外 Web 服务器,所有规则(HTTPS、静态资源、PHP 路由)都通过这个文件定义。配置本身不复杂,但路径、语法和环境变量配合必须准确,否则会直接报错或静默失效。
Caddyfile 必须放在哪?怎么启动才生效
FrankenPHP 启动时只在当前工作目录查找名为 Caddyfile(注意大小写,不是 caddyfile 或 CaddyFile)的文件,没有备用路径,也不支持 --config 参数。
- 正确做法:先 cd 到项目根目录(含 Caddyfile),再执行
./frankenphp - 如果打包分发,把 Caddyfile 和二进制放在同一目录,压缩为 zip/tar,文档注明“解压后进入该目录运行”
- 想用脚本自动切换路径,可写 wrapper.sh:
cd "$(dirname "$0")" && ./frankenphp -config ./Caddyfile(注意是-config,不是--config)
最简可用的 Caddyfile 写法
哪怕只服务一个 PHP 应用,也需要明确 root 和 php_server。以下是最小可行配置(假设项目 public/ 是 Web 根目录):
{
frankenphp {
num_threads auto
}
}
<p>localhost {<br>
root * ./public<br>
php_server<br>
}</p>
- 第一段
{ ... }是全局配置块,启用 FrankenPHP 运行时参数 -
localhost是站点块,可换成真实域名(如example.com),Caddy 会自动申请 HTTPS 证书 -
root * ./public告诉 Caddy 静态资源从 ./public 目录提供 -
php_server表示所有 .php 请求交由 FrankenPHP 处理,无需额外 rewrite
常见需求对应的配置补丁
实际项目往往需要更多控制,以下是几个高频场景的追加写法(加在站点块内即可):
- 强制 HTTPS + 自动证书:只要域名块里写的是合法域名(非 localhost),且端口 80/443 可达,Caddy 就自动启用;无需手动配 tls 指令
-
纯 HTTP 模式(如本地开发):不设域名,改用
:80块,并通过环境变量控制:SERVER_NAME=:80,同时确保容器或进程监听 :80 -
自定义 PHP 设置:在站点块中添加
php_ini opcache.enable 1或php_ini memory_limit 512M -
前端分离项目(如 Vue/React dist):用
handle /api/*明确转发 API,其余走try_files {path} /index.html实现 SPA fallback
验证配置是否生效
别只看浏览器地址栏,重点检查三处:
- 启动日志里有没有
autosaved config或enabling automatic HTTPS—— 有说明 Caddyfile 被读取并解析成功 - 用
curl -I http://localhost看响应头是否为HTTP/1.1 200 OK(HTTP 模式)或跳转到 https(HTTPS 模式) - 访问
/info.php(内容为<?php phpinfo(); ?>)能正常显示,说明 PHP 执行通路已打通
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











