Caddy配置 二娃备忘 【www.erwa.cn】
下面的操作没有什么实质功能用处,只是个人玩玩云服务和建站,随时更换建站方式或者停用!!
一、erwa建站:只有一个网站!没有用一个主站多个服务的方式。
纯手动方式。没有用小皮,宝塔。
之前安装宝塔,小皮,后来放弃使用。2026-05-03的 erwa.cn工作笔记

云服务器的防火墙放行端口:

| 对比项 | PHP 内置服务器 | php-cgi | php-fpm |
|---|---|---|---|
| 用途 | 本地开发、调试 | 简易部署、小站点 | 正式生产、高并发网站 |
| 性能 | 很差,单进程 | 一般,低并发 | 高性能、多进程 |
| 进程管理 | 无 | 无,请求来了就新建进程 | 自动常驻、进程池、自动控负载 |
| 稳定性 | 差,不抗访问 | 一般,容易挂 | 极强,崩溃自动拉起 |
| 伪静态 / 路由 | 有限支持 | 需前端服务器 (Caddy/Nginx) 配合 | 完美配合 Caddy/Nginx |
| 适合环境 | 自己电脑开发 | Windows 临时跑站 | 云服务器、正式建站 |
| Caddy 配合 | 可反向代理 | 可被 php_fastcgi 对接 |
可被 php_fastcgi 对接 |
- Caddy 不自带 PHP 解释器
- 必须把
.php请求交给下面三者之一:- php 内置服务器(反代模式)
- php-cgi(9000 端口 FastCGI)
- php-fpm(9000 端口 FastCGI)
- 本地自己开发 → 用:PHP 内置服务器
- 阿里云跑个人博客、低访问 → 用:php-cgi 够用
- 以后想稳定、速度快、防崩溃 → 换成:php-fpm
二、玩具方案:测试玩一玩
不用Caddy,换Nginx。
- 阿里云防火墙端口 9000,9001,9002 开放。
- www.erwa.cn 默认宝塔的Nignx服务器 wordpress
- www.erwa.cn:9000 才是caddy服务器
半成功配置:
测试备忘 :强制刷新浏览器。这是静态网页。index.html
缺点:
1、没有启动证书
2、url必须加\ 。
备注:
http://www.erwa.cn:9001 ✅ 正常打开网站
http://www.erwa.cn:9002 ✅ 正常打开网站
http://www.erwa.cn:9000 ✅ 主站正常
http://www.erwa.cn:9000/doc1 ❌ 还是主站首页,不代理
http://www.erwa.cn:9000/doc2 ❌ 还是主站首页,不代理
http://www.erwa.cn:9000/doc1/ ✅ 正常打开网站
http://www.erwa.cn:9000/doc2/ ✅ 正常打开网站
{ auto_https off } # 子网站1 :9001 { root * C:/websites/site-b file_server } # 子网站2 :9002 { root * C:/websites/site-a file_server } # 主网站 :9000 { root * C:/websites/site-c # 代理 doc1 handle_path /doc1/* { reverse_proxy http://127.0.0.1:9001 } # 代理 doc2 handle_path /doc2/* { reverse_proxy http://127.0.0.1:9002 } file_server }
90%成功配置:
缺点:没有证书。外网访问证书,需要80端口。
域名 www.erwa.cn 的 80 端口被宝塔 Nginx 占用
Caddy 无法自动申请 Let's Encrypt 公开可信 SSL 证书
(ACME 证书申请必须抢占 80/443 端口验证域名所有权,你被宝塔占死了)
✅ 现在全部正常了!
http://www.erwa.cn:9000/doc1✅http://www.erwa.cn:9000/doc1/✅http://www.erwa.cn:9000/doc2✅http://www.erwa.cn:9000/doc2/✅http://www.erwa.cn:9000✅
{ auto_https off } # 子网站1 :9001 { root * C:/websites/site-b file_server } # 子网站2 :9002 { root * C:/websites/site-a file_server } # 主网站 :9000 { root * C:/websites/site-c # 自动补斜杠,让 /doc1 → /doc1/ rewrite /doc1 /doc1/ rewrite /doc2 /doc2/ # 代理 handle_path /doc1/* { reverse_proxy http://127.0.0.1:9001 } handle_path /doc2/* { reverse_proxy http://127.0.0.1:9002 } file_server }
💡 两个小提醒
-
关于自动 HTTPS
你配置的第一行写了auto_https off。- 如果你是在本地测试(就像现在用
:9000这种端口),这个设置是没问题的。 - 如果你以后要把
www.erwa.cn正式对外发布,记得删掉auto_https off这一行,并且把:9000改成www.erwa.cn,这样 Caddy 才能自动帮你申请免费的 HTTPS 证书。
- 如果你是在本地测试(就像现在用
-
路径截断
handle_path指令还有一个好处:它会自动把/doc1这个前缀“切掉”再传给后端。- 比如你访问
http://...:9000/doc1/index.html - 传给 9001 端口的其实是
http://...:9001/index.html - 这正是我们通常想要的效果,你的子网站不需要知道
doc1这个前缀的存在。
- 比如你访问
失败配置:
1、配置 中 url 访问输出网页日志
https://www.erwa.cn:9000/doc1 进入的是https://www.erwa.cn:9000/的网页
下面配置: 网页显示
# 开启全局日志 { log { level DEBUG output stdout } } # 网站 A localhost:9002 { log { level DEBUG output stdout } root * C:/websites/site-a file_server } # 网站 B localhost:9001 { log { level DEBUG output stdout } root * C:/websites/site-b file_server } www.erwa.cn:9000 { log { level DEBUG output stdout } root * C:/websites/site-c # 最高优先级:拦截 doc1 @doc1 path /doc1 /doc1/* handle @doc1 { uri strip_prefix /doc1 reverse_proxy 127.0.0.1:9001 } # 最高优先级:拦截 doc2 @doc2 path /doc2 /doc2/* handle @doc2 { uri strip_prefix /doc2 reverse_proxy 127.0.0.1:9002 } # 其余走主页 try_files {path} /index.html file_server }
为什么之前一直失败?
- 你的
www.erwa.cn:9000是 HTTPS - 但你代理的
9001/9002是 HTTP - Caddy 默认用 HTTPS 去连 9001/9002 → 直接报错!
- 报错后 fallback 到
index.html→ 显示主页
http://www.erwa.cn:9000/doc1 如下图:

https://www.erwa.cn:9000/doc1 如下图:

错误2:
http://www.erwa.cn:9000/doc2/ 跳到 http://www.erwa.cn
{ auto_https off } http://localhost:9001 { root * C:/websites/site-b file_server } http://localhost:9002 { root * C:/websites/site-a file_server } :9000 { bind 0.0.0.0 root * C:/websites/site-c # 代理 handle_path /doc1/* { reverse_proxy http://127.0.0.1:9001 } handle_path /doc2/* { reverse_proxy http://www.erwa.cn } # 👇 只留这句,删掉 try_files!代理马上生效! file_server }

浙公网安备 33010602011771号