caddy配置php-fpm

它是什么内容覆盖指令含义、socket 写法、Caddy v1/v2 差异、单容器由 Caddy 拉起 php-fpm 的思路,以及 WordPress、CakePHP 等项目的落地步骤与常见排错点。

围绕 Caddyfile 的 php_fastcgi 指令,把客户端请求交给后端 PHP-FPM 执行,静态文件由 Caddy 直接读取。内容覆盖指令含义、socket 写法、Caddy v1/v2 差异、单容器由 Caddy 拉起 php-fpm 的思路,以及 WordPress、CakePHP 等项目的落地步骤与常见排错点。

👤
作者:谢林峰 | 更新:2026-10-04
软件信息
更新 2026-10-04

详细介绍

简介

Caddy 配置 php-fpm 指的是在 Caddyfile 中把 PHP 请求转交给后端 PHP-FPM(PHP FastCGI Process Manager)处理的一套写法:Caddy 收到客户端请求后发送给 php-fpm,由它执行 PHP 脚本并返回结果,静态文件仍由 Caddy 直接读取。它解决的是「用 Caddy 替代 Nginx 承担 PHP 站点」时的配置问题,适合已经在用 Caddy 托管静态站、又需要跑 WordPress、CakePHP 等 PHP 应用的运维者与个人站长。核心优势是 php_fastcgi 这条指令是为 PHP 应用量身定制的快捷方式,能省去手写一长串 FastCGI 参数。

核心功能

  • php_fastcgi 是一条有主见的指令,把请求代理到 php-fpm 这类 PHP FastCGI 服务器,是专为 PHP 应用定制的快捷方式,取代更长的配置写法。
  • Caddy 的 reverse_proxy 本身能够服务任何 FastCGI 应用,php_fastcgi 只是在它之上针对 PHP 场景做了封装。
  • 指令期望站点根目录(root),需要在站点块中先声明 PHP 文件所在目录,Caddy 才知道去哪里取 index.php 等文件。
  • 后端既可以用 unix socket 连接,例如 gist 中 CakePHP 示例写法里的 unix//run/php/php7.4-fpm,也可以按 php-fpm 实际监听地址填写。
  • Caddy 可通过 supervisor 插件自行启动 php-fpm,让 Web 服务器与 PHP 进程在同一容器或同一份配置里一起运行。
  • 配合 systemd 记录 php-fpm 的日志,进程退出与报错信息可由系统日志统一收集。
  • 静态文件与动态请求在同一站点块内分流,一条配置即可完成 php-fpm 的反向代理。

使用场景

  • 新申请的云主机(例如 Ubuntu 的 Digital Ocean droplet)上用 Caddy 承担 Web 服务,同时需要跑 PHP 程序。
  • 已有 Caddy 静态站点,需要追加 PHP 支持,把动态请求转给 php-fpm。
  • 部署 WordPress 一类的 PHP 应用,流程通常是先配置 PHP、再配置 Caddy、然后配置数据库并导入旧站点。
  • CakePHP 3(以及可能的 CakePHP 2)项目,站点根目录指向 webroot,用 php_fastcgi 转发到 unix socket。
  • 单容器部署:Caddy 通过 supervisor 插件启动 php-fpm,一个镜像同时提供 Web 与 PHP 运行时。
  • 把原本跑在 Nginx + PHP-FPM 上的站点迁到 Caddy,用一行配置替换原来的 location 与 fastcgi_pass 片段。

安装与获取步骤

  1. 准备好 Caddy 与 PHP-FPM,确认 php-fpm 进程已启动,并记下它监听的 unix socket 路径或 TCP 端口,后续写配置要用到。
  2. 编写 Caddyfile 站点块:先写 root 指向 PHP 项目根目录(如 webroot),再写 php_fastcgi 加上 php-fpm 地址,gist 中的写法形如 localhost:80 { root * webroot; php_fastcgi unix//run/php/php7.4-fpm }。
  3. 若不想用快捷指令,可用 reverse_proxy 手写 FastCGI 转发参数,它能服务任意 FastCGI 应用,但配置更长。
  4. 需要让 Caddy 托管 php-fpm 进程时,启用 Caddy 的 supervisor 插件,由 Caddy 负责拉起并守护 php-fpm。
  5. 重载或重启 Caddy 后访问站点首页与一个 PHP 入口文件,确认返回的是 PHP 执行结果而非源码或 404。
  6. 参考项目文档与社区文章核对细节,例如 https://caddyserver.com/docs/caddyfile/directives/php_fastcgi 与 https://php.watch/articles/caddy-php ,具体参数以官方页面为准。

与同类方案的区别

  • Nginx + PHP-FPM 是常见组合,需要手写 location 与 fastcgi_pass;Caddy 侧用一条 php_fastcgi 即可表达同样的转发关系。
  • Roadrunner、Swoole 属于常驻进程型 PHP 运行方式,与 php-fpm 这种 FastCGI 进程管理器的模型不同,选型时按应用框架要求决定。
  • ModSecurity 是跨平台 WAF 引擎,素材中列出的支持对象为 Apache、IIS 与 Nginx;是否适用于 Caddy 场景以官方页面为准。
  • FrankenPHP 这类方案可用 Caddy 支持的配置格式来配置,并自带 PHP 解释器查找配置的规则,与「Caddy + 外部 php-fpm」的组合方式不同。

注意事项

  • unix socket 路径必须与本机 php-fpm 实际监听路径一致,gist 中的 unix//run/php/php7.4-fpm 只是示例,以本机 php-fpm 配置与官方页面为准。
  • php_fastcgi 期望站点根目录,若漏写 root,会出现找不到入口文件或 404 的现象。
  • Caddy 作者重构后是 Caddy 2,指令与语法与早期版本不同;gist 明确提醒使用 Caddy V2 时应参考对应的 V2 写法。
  • 在全新 Ubuntu 14.04 droplet 上按经验配置仍可能失败(见 issue #435),需逐项确认 php-fpm 服务状态、socket 是否存在、防火墙与端口是否放行。
  • reverse_proxy 能服务任意 FastCGI 应用,php_fastcgi 只针对 PHP;转发非 PHP 的 FastCGI 程序时不要照搬该指令。
  • 用 systemd 记录 php-fpm 日志时,注意区分 Caddy 自身日志与 php-fpm 日志,排错时分别查看。

更新记录

最近更新:2026-10-04

软件参数速览

本站更新时间2026-10-04

下载

常见问题

Caddyfile 里 php_fastcgi 后面应该填什么地址?

填 php-fpm 的监听地址,可以是 unix socket,例如 gist 中 CakePHP 示例用的 unix//run/php/php7.4-fpm,也可以是 TCP 地址。具体以本机 php-fpm 配置文件里 listen 项为准。

配置后访问 index.php 返回 404 或直接下载了源码,怎么排查?

php_fastcgi 期望站点根目录,先确认站点块里写了 root 指向 PHP 项目根目录(如 webroot),再确认该目录下确实存在入口文件,最后确认 php-fpm 进程正在运行且 socket 可访问。

Caddy v1 的 Caddyfile 能直接拿到 Caddy v2 上用吗?

不能。素材提到作者重构后是 Caddy 2,指令与语法都变了;gist 明确提醒使用 Caddy V2 时应参考专门的 V2 gist,旧写法需按 v2 文档改写。

不想单独维护 php-fpm 进程,可以让 Caddy 带起来吗?

可以。gist 中的做法是用 Caddy 的 supervisor 插件由 Caddy 启动 php-fpm,实现单容器同时提供 Caddy 与 PHP,php-fpm 的生命周期随 Caddy 管理。

php_fastcgi 和 reverse_proxy 转发 FastCGI 有什么区别?

reverse_proxy 能服务任意 FastCGI 应用,配置较长;php_fastcgi 是为 PHP 应用量身定制的快捷方式,替代更长的配置,并且期望站点根目录,PHP 站点优先用它。

在全新 Ubuntu 14.04 的 droplet 上照着做仍然跑不通,先查什么?

issue #435 反映过同类问题。按顺序确认 php-fpm 服务已启动、监听的 socket 或端口与配置一致、Caddyfile 的 root 指向正确,再结合系统服务状态逐项排查,细节以官方页面为准。

Caddy 能不能转发非 PHP 的 FastCGI 程序?

可以。Caddy 的 reverse_proxy 具备服务任何 FastCGI 应用的能力,php_fastcgi 只是针对 PHP 的封装,转发其他 FastCGI 程序时应使用 reverse_proxy 并自行写全参数。

想给这套 PHP 站点加 WAF,ModSecurity 能直接用吗?

ModSecurity 是跨平台 WAF 引擎,素材中列出的支持对象是 Apache、IIS 与 Nginx,未提及 Caddy;是否适用于本方案请以官方页面为准,不要默认兼容。

相关推荐

caddy和apache区别
对比 Caddy 与 Apache 两款 Web 服务器在证书自动化、配置语法、依赖结构与迁移成本上的差别,并给出选型场景、获取步骤与常见问题解答,供自建站点与反向代理选型参考。
caddy免费证书自动续期
Caddy 是默认自动启用 HTTPS 的 Web 服务器,能为站点自动申请 Let's Encrypt 证书、在有效期剩余三分之一时自动续期并把 HTTP 跳转到 HTTPS,适合从 Nginx 或 acme.sh 迁移的站长与开发者。
caddy反向代理配置实例
Caddy 是用 Go 编写的多平台 Web 服务器与反向代理服务器,通过 Caddyfile 一行级配置即可把请求转发到上游,并自动从 Let's Encrypt 获取与续期证书,省去 Certbot 与 ACME 的额外维护,适合中小型生产部署。
Caddy 绿色版
提供 Caddy Windows 版本的下载入口、版本信息与安装步骤,安装前请核对系统版本与架构。
caddy配合frp使用
caddy配合frp使用是一套把frp内网穿透与Caddy反向代理组合的部署方案:frp把内网端口暴露到公网服务器,Caddy按域名分流并自动处理HTTPS证书,适合有域名、想用统一入口管理多个内网服务的个人与小团队。
caddy插件编译安装
Caddy 官方软件包只含标准模块,需要第三方插件时要用 xcaddy 从源码构建出专属二进制文件。本页整理 xcaddy 的作用、适用场景、获取与构建步骤,以及与官方包、Docker 镜像、Nginx 方案的差别和常见坑点。