零改动即可运行经典模式,但要发挥性能优势需修改入口文件、caddyfile和php扩展配置;经典模式兼容原有laravel代码,worker模式需安装laravel/octane并重写index.php以支持常驻内存。

零改动就能跑通,但想真正发挥性能优势,必须动三处:入口文件、Caddyfile、PHP扩展配置。
经典模式下只换 Web 服务器,不改代码
如果你只是把 FrankenPHP 当作 Nginx + PHP-FPM 的“一键替换”,那确实不用动 Laravel 或其他框架的任何一行业务代码。FrankenPHP 默认启用 classic 模式,它会自动识别 public/index.php,走和 PHP-FPM 完全一致的 FastCGI 兼容路径——请求进来,启动一次 PHP 进程,执行完销毁。这种模式下:
- 你原来的
nginx.conf、www.conf、php.ini全部废弃,一个Caddyfile就够 -
public/目录仍为文档根,.env、storage/权限规则照旧 - 所有中间件、路由、数据库连接行为完全不变,连日志格式都一样
- 唯一要注意的是:FrankenPHP 不读系统级
php.ini,所有配置得通过frankenphp php-cli-m查内置扩展,再用install-php-extensions补齐(比如pdo_mysql、redis)
Worker 模式必须改入口文件和依赖
想把 Laravel 启动耗时从每次请求里砍掉,就得切到 worker 模式。这不是开关一开就生效的事,它要求应用具备“无状态”特征,且入口逻辑要由 FrankenPHP 控制生命周期:
- 必须安装
laravel/octane(FrankenPHP 官方推荐,不是可选) - 入口文件
public/index.php要重写成调用frankenphp_handle_request(),否则直接 500 -
bootstrap/app.php里不能有全局副作用(比如在文件顶层 new DB 连接),否则 worker 复用时会出错 - Session、Cache、队列等必须走外部服务(Redis/Memcached),不能依赖 PHP 进程内变量或文件存储
Caddyfile 替代全部 Nginx 配置,但写法不同
原来分散在多个文件里的配置,现在全压进一个 Caddyfile,但语法和语义有关键差异:
-
fastcgi_pass没了,直接用php指令,FrankenPHP 自动接管 PHP 执行 - 静态文件不需要
location ~ \.php$分离,Caddy 会自动跳过.php以外的路径 - HTTPS 不用手动配证书路径,加一行
tls your@email.com就自动申请 Let’s Encrypt - 重写规则用
rewrite而非try_files,例如 Laravel 的前端控制器规则写成:rewrite * /index.php?{query} - 别漏掉
php块里的root设置,否则index.php找不到,报 404
最常被忽略的是:Worker 模式下,$_SERVER 变量不再由 CGI 协议注入,而是由 FrankenPHP 内部填充。像 HTTP_X_FORWARDED_FOR、REQUEST_URI 这些字段如果业务代码里硬依赖原始 CGI 值,可能出偏差——得靠 Caddyfile 的 header 指令手动透传或修正。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











