FrankenPHP 不提供禁用内置服务器的开关,其端口由 Caddy 配置决定;可通过修改 Caddyfile 指定监听端口(如 :8080),或用 Nginx 反向代理使其仅监听回环地址,亦可启用 worker 模式脱离 HTTP 服务。

FrankenPHP 本身不提供“禁用内置服务器”或“改用自定义监听端口”的独立开关——它的设计就是以 Caddy 作为内置 Web 服务器运行,端口由 Caddy 配置决定。所谓“禁用内置服务器”,实际是指绕过 FrankenPHP 默认的 Caddy HTTP 服务层,改用其他方式(如 Nginx 反向代理、或直接暴露 PHP Worker)接入请求。但注意:FrankenPHP 没有传统意义上的“PHP-FPM 端口监听”模式,它也不支持像 php-fpm.conf 那样配置 listen = 127.0.0.1:9000。
核心逻辑:FrankenPHP 的端口由 Caddy 控制
FrankenPHP 启动后,默认运行一个嵌入式的 Caddy 实例,监听端口(通常是 :80 和 :443),并自动处理 HTTPS、静态文件、路由转发等。你不能“关掉 Caddy 改用别的端口监听”,但可以:
- 修改 Caddy 监听的端口(最常用、推荐)
- 用反向代理前置 Nginx/Apache,让 FrankenPHP 只处理 FastCGI 或 HTTP 内部请求(需额外配置)
- 启用 FrankenPHP 的
worker模式,完全脱离 HTTP 服务器,由你自行编写调度逻辑(高级用法,非端口修改)
方法一:直接修改 Caddy 监听端口(标准做法)
在项目根目录创建或编辑 Caddyfile,覆盖默认行为:
your-domain.com:8080 {
root * /app/public
php_backend
encode zstd gzip
}关键点:
立即学习“PHP免费学习笔记(深入)”;
-
your-domain.com:8080中的:8080就是新端口,可改为任意可用端口(如:8888) - 若想监听所有 IP(包括局域网访问),写成
:8080即可,无需域名 - 启动时 FrankenPHP 会自动加载该 Caddyfile,无需额外参数
- Docker 用户可在
docker run命令中挂载 Caddyfile:-v $(pwd)/Caddyfile:/etc/caddy/Caddyfile
方法二:用 Nginx 反向代理,FrankenPHP 仅监听回环地址
适用于已有 Nginx 环境、需统一管理 SSL 或流量策略的场景:
- 启动 FrankenPHP 时指定只监听本地:
frankenphp serve --http :127.0.0.1:8000 - 在 Nginx 配置中添加反向代理块:
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}此时外部访问走 Nginx 的端口(如 80/443/8080),FrankenPHP 退为纯后端,不对外暴露。
常见误区澄清
以下操作无效或错误:
- 修改
php.ini中的listen—— FrankenPHP 不读取该配置,也不运行 PHP-FPM - 尝试配置
www.conf或php-fpm.d/—— FrankenPHP 不依赖 PHP-FPM 进程管理器 - 期望通过环境变量如
PORT=8080切换 —— 官方未提供此机制,必须靠 Caddyfile 或命令行参数 - 以为“禁用内置服务器”后还能直接接收 HTTP 请求 —— 若关闭 Caddy,FrankenPHP 将无法响应任何 HTTP 请求,除非你自行实现 socket 服务
验证端口是否生效
启动后执行:
-
curl -v http://localhost:8080(检查返回头和状态码) -
ss -tlnp | grep :8080(Linux)或netstat -an | findstr :8080(Windows)确认端口已监听 - 查看 FrankenPHP 启动日志,应出现类似
server running on http://:8080



















