综合练习
用 Caddyfile 复现 CodeRoadMap 反代。
40 分钟
综合练习
本课在测试机用 Caddyfile 复现 CodeRoadMap 反代拓扑:自动 HTTPS、/api → Spring Boot :8080、/ → Next.js :3000,并对照 deploy/nginx/prod.conf.example 与 ngx-practice 验收。
学习目标
- 从零编写 test 环境 Caddy 配置
- 联调 spring-boot-essentials 与 nextjs-essentials 进程
- 完成端到端 smoke test 与配置审查清单
核心内容
前置:启动后端与前端
# 终端 1 — backend
cd backend && ./mvnw spring-boot:run # :8080
# 终端 2 — platform
cd platform && npm run dev # :3000
确认 curl http://127.0.0.1:8080/tracks 与 curl http://127.0.0.1:3000 均正常。
部署 test Caddyfile
# deploy/caddy/test.caddyfile.example
{
email admin@coderoadmap.cn
# acme_ca ... staging 可选
}
test.coderoadmap.cn {
handle /api/* {
uri strip_prefix /api
reverse_proxy 127.0.0.1:8080
}
handle {
reverse_proxy 127.0.0.1:3000
}
}
sudo cp deploy/caddy/test.caddyfile.example /etc/caddy/Caddyfile
caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
/etc/hosts 或 dns-records 将 test.coderoadmap.cn 指向本机。Docker 路线见 caddy-docker。
验收清单
| 检查项 | 命令 / 操作 | 期望 |
|---|---|---|
| HTTPS 证书 | 浏览器锁图标 | Let's Encrypt 有效 |
| 页面 | 打开 /tracks/caddy-essentials | Next 渲染 |
| API | curl https://test.../api/tracks | JSON 列表 |
| 路径剥离 | 对比 :8080 /tracks | 与 /api/tracks 一致 |
| 上传 | 管理端小文件 POST | ≤20MB 不 413 |
故障排查速查
502 Bad Gateway → upstream 未监听 / handle 指错端口
404 on /api/foo → 缺少 strip_prefix / handle 顺序
证书失败 → DNS、防火墙、staging 切换
HMR 失败 → Upgrade 头(caddy-proxy)