caddy服务器配置教程
它是什么Caddy 是用 Go 编写的开源 Web 服务器,支持 HTTP/2,默认启用 HTTPS。
Caddy 是用 Go 编写的开源 Web 服务器,支持 HTTP/2,默认启用 HTTPS。本页整理其配置方式(Caddyfile、原生 JSON、JSON API)、Debian/Ubuntu 安装命令、启动与重载流程、与 Nginx 的差异及常见问题,适合需要快速搭建反向代理与自动证书管理的运维与开发者参考。
详细介绍
简介
Caddy 是一个使用 Go 语言编写的开源 Web 服务器,支持 HTTP/2,并使用 Go 标准库提供 HTTP 功能。它要解决的问题是:传统 Web 服务器配置项繁琐、证书管理需要额外工具维护,导致部署一个站点要反复查阅文档。Caddy 把常见路径压缩到一份 Caddyfile 里,同时保留原生 JSON 配置与 JSON API 两条更强的控制通道,默认启用 HTTPS。它适合自建服务器的个人用户、需要反向代理多个自托管应用的团队,以及希望把 Web 服务器管理做成自动化、集成发布流程的开发者。核心优势是配置层次清晰:想要快就写 Caddyfile,想要精细控制就用 JSON,想要动态调整就调 API。
核心功能
- 简洁配置:通过 Caddyfile 描述站点与路由,语法结构直观,是大多数人首选的配置方式。
- 原生 JSON 配置:Caddy 内部使用 JSON 表达完整配置,可覆盖 Caddyfile 未暴露的细节。
- JSON API 动态配置:配置能被动态修改且可以导出来,不需要重启进程即可调整运行中的配置。
- 配置适配器:如果已有其他格式的配置,可通过配置适配器转换后再交给 Caddy 使用。
- 默认启用 HTTPS:Caddy 使用 Go 标准库提供 HTTP 功能,HTTPS 作为默认行为,减少证书相关步骤。
- 反向代理:可作为反向代理,让多个自托管应用共用一个公网 IP 地址。
- 跨平台:项目定位为多平台、可扩展的 Web 服务器,基于 Go 语言开发。
使用场景
- 反向代理聚合:Nginx、Caddy、Traefik 三者都能让多个自托管应用共用一个公网 IP,性能都足够高,真正的瓶颈通常在应用本身。
- 证书管理减负:Nginx 功能强大但设定繁琐,Certbot 又是一层维护负担;Caddy 内建自动 HTTPS、语法简洁,对中小型部署更实际。
- 自动化运维:除配置文件外,Caddy 还提供管理配置的接口,可用于 Web 服务器管理自动化、集成发布等高级功能。
- 快速起站:一两行命令就可以启动一个可用于生产环境的站点,适合个人自建服务器上手。
- 配置格式迁移:已有其他格式配置时,用配置适配器转换,再比较 JSON 与 Caddyfile 两种写法的取舍。
安装与获取步骤
- 在 Debian、Ubuntu、Raspbian 上先补齐依赖:
sudo apt install --yes debian-keyring debian-archive-keyring apt-transport-https curl。 - 导入 Caddy 稳定版仓库的 GPG 密钥:
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg。 - 写入软件源列表并放开读权限:
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list,随后对密钥文件与源列表文件执行sudo chmod o+r,再运行sudo apt update。 - 创建一份 Caddyfile:官方文档的 Common Caddyfile Patterns 页面给出了若干完整且最小化的配置,可直接作为起点改写。
- 启动服务:
systemctl start caddy;配置修改后用systemctl reload caddy重载。 - 需要验证时按官方文档的「测试配置」流程检查 Caddyfile,再决定是否 reload;其他发行版的获取方式以官方页面 https://caddyserver.com/docs/install 为准。
与同类方案的区别
- 与 Nginx 相比:Caddy 除了简单易懂的配置文件方式,还提供管理配置的接口;Nginx 则以配置项细密著称,证书常需配合 Certbot 单独维护。
- 与 Traefik 相比:三者都适合反向代理场景,主要差异在于各自如何获取 TLS 证书,而不是转发性能。
- 配置入口不同:Caddy 同时提供 Caddyfile、原生 JSON 与 JSON API 三条路径,配置适配器负责格式转换;文档中「比较 JSON 和 Caddyfile」一节专门讨论两者取舍。
- 社区与文档:Caddy 有中文社区站点与中文文档站,可对照 https://caddyserver.org/zh-hant.html 与 https://caddyserver.com.cn/docs/getting-started 阅读。
注意事项
- 配置文件写完不等于生效:每次配置修改后需执行
systemctl reload caddy进行重载,直接改文件不会自动应用。 - 不要只盯 Caddyfile:基于 API 的配置可被动态修改且能导出,即使不使用配置文件也能工作,排查问题时应确认当前生效的是哪一份配置。
- 选择配置深度:Caddyfile 覆盖常见需求,原生 JSON 承载完整配置,两者能力边界不同,切换前先看文档的对比说明。
- 版本号、文件大小、校验值、发布日期等信息以官方页面 https://caddyserver.com/docs/install 为准,不要照搬第三方教程中的数字。
- 反向代理的性能上限取决于后端应用:三个主流方案转发能力都足够,优化应优先放在应用侧。
更新记录
最近更新:2026-10-03
软件参数速览
下载
常见问题
Caddyfile 和原生 JSON 配置该选哪个?
大多数人最喜欢通过 Caddyfile 配置,适合描述站点与路由;需要 Caddyfile 未暴露的细节时改用原生 JSON。文档中有「比较 JSON 和 Caddyfile」一节,按控制粒度选择即可。
改完配置文件后服务没变化怎么办?
配置修改后执行 systemctl reload caddy 进行重载,重载会应用新配置;只保存文件不重载,进程仍按旧配置运行。
不用配置文件能驱动 Caddy 吗?
可以。基于 Caddy 的 API,配置能被动态修改且能导出来,不需要配置文件;不过大多数人仍通过 Caddyfile 来配置。
Caddy 和 Nginx 做反向代理怎么选?
两者转发性能都足够,瓶颈通常在应用本身,主要差异是获取 TLS 证书的方式。Caddy 内建自动 HTTPS,Nginx 常配合 Certbot,多一层维护负担。
Debian 源添加后 apt update 需要注意什么?
先对密钥文件 /usr/share/keyrings/caddy-stable-archive-keyring.gpg 和源列表 /etc/apt/sources.list.d/caddy-stable.list 执行 sudo chmod o+r,再运行 sudo apt update。
配置适配器解决什么问题?
当你手上的配置不是 Caddyfile 或 JSON 格式时,用配置适配器先转换成 Caddy 的配置,再交给进程加载,省去手工重写。
Caddy 默认就启用 HTTPS 吗?
是的,Caddy 默认启用 HTTPS,使用 Go 标准库提供 HTTP 功能。具体证书行为与边界以官方文档页面为准。
从哪里找可直接改的配置样例?
官方文档的 Common Caddyfile Patterns 页面给出若干完整且最小化的 Caddyfile 配置,可作为常见用例的起点;开始上手一节则覆盖运行守护进程、测试配置与创建 Caddyfile 的流程。