
FrankenPHP 1.2 可以直接运行大多数传统 PHP-FPM 项目,无需重写代码,但需要调整部署方式和少量配置。核心在于:它不再依赖外部 FastCGI 进程,而是把 PHP 运行时嵌入 Go 服务器中,以常驻 Worker 模式执行——这意味着你得放弃 php-fpm.conf 和 Nginx 的 fastcgi_pass 配置,改用 FrankenPHP 自带的 HTTP 服务或搭配 Caddy。
确认项目兼容性:先看哪些能直接跑
绝大多数基于 Composer、使用标准 PSR-7/PSR-15 或纯函数式入口(如 index.php)的项目都可直接运行。重点检查以下三点:
- 不依赖
$_SERVER['FCGI_ROLE']或其他 FastCGI 特定环境变量(FrankenPHP 不模拟 FastCGI 协议,而是原生 HTTP) - 没有硬编码
php-fpm进程管理逻辑(如调用posix_kill管理子进程) - 数据库连接、缓存、日志等扩展已启用(FrankenPHP 使用系统 PHP 安装,需确保
pdo_mysql、redis、opcache等已编译并加载)
替换 Nginx+PHP-FPM:用 FrankenPHP 内置服务器启动
最简方式是用 FrankenPHP 自带的 HTTP 服务器替代整套 Nginx + PHP-FPM。假设你的项目根目录是 /var/www/myapp,且包含标准 public/index.php 入口:
- 确保已安装 FrankenPHP 1.2(推荐从 frankenphp.dev 下载预编译二进制)
- 在项目根目录下创建
frankenphp.yaml:
server:
http_address: ":8080"
tls:
enabled: false
<p>workers:</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站"><img
src="https://img.php.cn/upload/skill/000/000/081/179040786932301.jpg" alt="btpanel phpsite 宝塔面板PHP网站" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站">btpanel phpsite 宝塔面板PHP网站</a>
<p>宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理</p>
</div>
<a href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p><ul><li>name: "app"
script: "public/index.php"
document_root: "public"
env:
APP_ENV: "production"
APP_DEBUG: "false"- 执行:
frankenphp run(自动读取当前目录的frankenphp.yaml) - 访问
http://localhost:8080即可,静态文件(CSS/JS/IMG)由 FrankenPHP 自动托管,无需额外配置
进阶:用 Caddy 替代 Nginx,更贴近生产习惯
如果你习惯用反向代理做 HTTPS、日志、压缩或路由分发,Caddy 是 FrankenPHP 官方推荐搭档,配置比 Nginx 更简洁:
- 安装 Caddy(支持
php插件的版本,或使用 Caddy 2.8+ 内置 FrankenPHP 支持) - 在 Caddyfile 中写:
example.com {
root * /var/www/myapp/public
php_backend localhost:8080
encode zstd gzip
file_server
}- 同时运行:
frankenphp run --server.http-address=localhost:8080(仅监听本地端口,不暴露公网) - Caddy 自动处理 TLS 终止、HTTP/3、静态资源缓存,FrankenPHP 专注执行 PHP
适配常见框架的细节处理
部分框架(如 Laravel、Symfony、ThinkPHP)默认依赖 SCRIPT_NAME 或路径重写,需微调:
-
Laravel:确保
public/.htaccess被忽略(FrankenPHP 不走 Apache),改用frankenphp.yaml的document_root指向public,并设置APP_URL=http://example.com -
Symfony:若用
index.php入口,确认$_SERVER['REQUEST_URI']正确;FrankenPHP 默认透传原始 URI,一般无需改动 -
WordPress:需开启
permalink的话,在frankenphp.yaml中添加rewrite: true并确保.htaccess规则已转为 Caddy 的try_files逻辑


















