Caddy 基本命令 #

命令概览 #

Caddy 提供了一套完整的命令行工具,用于管理服务、配置和证书:

text
┌─────────────────────────────────────────────────────────────┐
│                    Caddy 命令概览                            │
├─────────────────────────────────────────────────────────────┤
│  🚀 run        启动 Caddy 服务器                             │
│  🔄 reload     重载配置文件                                   │
│  🛠️ adapt      转换配置格式                                   │
│  ✅ validate   验证配置文件                                   │
│  📝 fmt        格式化 Caddyfile                              │
│  📋 list-modules 列出模块                                    │
│  📦 environ    显示环境变量                                   │
│  📖 version    显示版本信息                                   │
└─────────────────────────────────────────────────────────────┘

启动命令(run) #

基本启动 #

bash
# 使用默认配置启动
caddy run

# 指定配置文件
caddy run --config Caddyfile

# 指定配置适配器
caddy run --config caddy.json --adapter json

# 后台运行
caddy run --config Caddyfile &

常用参数 #

bash
# 指定配置文件
caddy run --config /etc/caddy/Caddyfile

# 指定配置适配器
caddy run --config Caddyfile --adapter caddyfile

# 打印环境变量
caddy run --environ --config Caddyfile

# 指定管理 API 地址
caddy run --config Caddyfile --admin :2019

# 禁用管理 API
caddy run --config Caddyfile --admin off

# 指定 PID 文件
caddy run --config Caddyfile --pidfile /var/run/caddy.pid

# 指定数据目录
caddy run --config Caddyfile --data /var/lib/caddy

# 指定配置目录
caddy run --config Caddyfile --config /etc/caddy

完整启动示例 #

bash
# 生产环境启动
caddy run \
    --config /etc/caddy/Caddyfile \
    --adapter caddyfile \
    --environ \
    --pidfile /var/run/caddy.pid

systemd 服务管理 #

bash
# 启动服务
sudo systemctl start caddy

# 停止服务
sudo systemctl stop caddy

# 重启服务
sudo systemctl restart caddy

# 查看状态
sudo systemctl status caddy

# 开机自启
sudo systemctl enable caddy

# 禁用开机自启
sudo systemctl disable caddy

# 查看日志
sudo journalctl -u caddy -f

重载命令(reload) #

基本重载 #

bash
# 重载默认配置
caddy reload

# 指定配置文件
caddy reload --config Caddyfile

# 指定管理 API 地址
caddy reload --admin localhost:2019

# 强制重载
caddy reload --config Caddyfile --force

重载参数说明 #

参数 说明 示例
--config 配置文件路径 --config /etc/caddy/Caddyfile
--adapter 配置适配器 --adapter caddyfile
--address 管理 API 地址 --address localhost:2019
--force 强制重载 --force

重载流程 #

text
┌─────────────────────────────────────────────────────────────┐
│                    配置重载流程                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 读取新配置文件                                          │
│       ↓                                                     │
│  2. 验证配置语法                                            │
│       ↓                                                     │
│  3. 解析配置内容                                            │
│       ↓                                                     │
│  4. 比较新旧配置                                            │
│       ↓                                                     │
│  5. 平滑切换配置                                            │
│       ↓                                                     │
│  6. 旧连接继续处理完成                                       │
│       ↓                                                     │
│  7. 新连接使用新配置                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

零停机重载 #

bash
# Caddy 支持零停机重载
# 修改配置后执行
caddy reload --config Caddyfile

# 服务不会中断
# 正在处理的请求继续完成
# 新请求使用新配置

停止命令(stop) #

基本停止 #

bash
# 停止 Caddy
caddy stop

# 指定管理 API 地址
caddy stop --admin localhost:2019

优雅停止 #

bash
# Caddy 默认优雅停止
# 1. 停止接受新连接
# 2. 等待现有请求完成
# 3. 关闭服务器

配置转换命令(adapt) #

Caddyfile 转 JSON #

bash
# 基本转换
caddy adapt --config Caddyfile

# 格式化输出
caddy adapt --config Caddyfile --pretty

# 保存到文件
caddy adapt --config Caddyfile --pretty > caddy.json

# 指定适配器
caddy adapt --config caddy.json --adapter json

转换示例 #

bash
# 输入 Caddyfile
cat Caddyfile
caddyfile
example.com {
    reverse_proxy localhost:3000
}
bash
# 转换输出
caddy adapt --config Caddyfile --pretty
json
{
  "apps": {
    "http": {
      "servers": {
        "srv0": {
          "listen": [":443"],
          "routes": [
            {
              "match": [
                {
                  "host": ["example.com"]
                }
              ],
              "handle": [
                {
                  "handler": "subroute",
                  "routes": [
                    {
                      "handle": [
                        {
                          "handler": "reverse_proxy",
                          "upstreams": [
                            {
                              "dial": "localhost:3000"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "terminal": true
            }
          ],
          "automatic_https": {
            "disable": false
          }
        }
      }
    }
  }
}

验证命令(validate) #

基本验证 #

bash
# 验证 Caddyfile
caddy validate --config Caddyfile

# 验证 JSON 配置
caddy validate --config caddy.json --adapter json

验证输出 #

bash
# 配置有效
$ caddy validate --config Caddyfile
Valid configuration

# 配置无效
$ caddy validate --config Caddyfile
Error: adapting config using caddyfile: parsing caddyfile tokens for 'example.com': 
Caddyfile:2 - Error during parsing: unknown directive: invalid_directive

验证并显示配置 #

bash
# 验证并显示转换后的 JSON
caddy adapt --config Caddyfile --validate

格式化命令(fmt) #

基本格式化 #

bash
# 检查格式
caddy fmt --check Caddyfile

# 格式化并输出
caddy fmt Caddyfile

# 格式化并覆盖原文件
caddy fmt --overwrite Caddyfile

# 格式化多个文件
caddy fmt --overwrite *.caddyfile

格式化示例 #

bash
# 格式化前
cat Caddyfile
caddyfile
example.com{
root * /var/www
file_server
}
bash
# 格式化后
caddy fmt --overwrite Caddyfile
cat Caddyfile
caddyfile
example.com {
	root * /var/www
	file_server
}

模块命令(list-modules) #

列出所有模块 #

bash
# 列出所有模块
caddy list-modules

# 输出示例
http
http.handlers
http.handlers.static_response
http.handlers.reverse_proxy
http.handlers.file_server
http.handlers.authentication
...

过滤模块 #

bash
# 过滤特定模块
caddy list-modules | grep reverse_proxy

# 列出 HTTP 相关模块
caddy list-modules | grep http

# 列出认证模块
caddy list-modules | grep auth

查看模块版本 #

bash
# 显示模块版本信息
caddy list-modules --versions

环境命令(environ) #

显示环境变量 #

bash
# 显示 Caddy 相关环境变量
caddy environ

# 输出示例
CADDY_ADMIN=localhost:2019
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
XDG_DATA_HOME=/var/lib
XDG_CONFIG_HOME=/var/lib/caddy/config

版本命令(version) #

查看版本 #

bash
# 显示版本
caddy version

# 输出示例
v2.7.6 h1:bPufDvWY/4DnL1Q1J9jDQ4L3N+8Q4L3N+8Q4L3N+8Q4L3N+8Q4L3N+8Q4L3N+8Q4=

证书命令 #

信任证书 #

bash
# 信任本地开发证书
caddy trust

# 指定管理 API
caddy trust --admin localhost:2019

列出证书 #

bash
# 通过 API 列出证书
curl localhost:2019/certificates | jq

手动获取证书 #

caddyfile
# Caddyfile 中配置域名后启动
# Caddy 会自动获取证书
example.com {
    respond "Hello"
}

管理 API #

API 端点 #

Caddy 提供了丰富的管理 API:

bash
# 获取当前配置
curl localhost:2019/config

# 获取配置的特定部分
curl localhost:2019/config/apps/http

# 更新配置
curl -X POST \
    -H "Content-Type: application/json" \
    -d @config.json \
    localhost:2019/load

# 删除配置
curl -X DELETE localhost:2019/config/apps/http/servers/srv0

常用 API 操作 #

bash
# 获取服务器信息
curl localhost:2019/config/

# 获取所有路由
curl localhost:2019/config/apps/http/servers

# 添加新路由
curl -X POST \
    localhost:2019/config/apps/http/servers/srv0/routes/0 \
    -H "Content-Type: application/json" \
    -d '{
        "match": [{"host": ["new.example.com"]}],
        "handle": [{
            "handler": "static_response",
            "body": "Hello from new site"
        }]
    }'

# 获取证书信息
curl localhost:2019/certificates

# 获取反向代理上游状态
curl localhost:2019/reverse_proxy/upstreams

动态配置示例 #

bash
# 动态添加站点
curl -X POST localhost:2019/config/apps/http/servers/srv0/routes \
    -H "Content-Type: application/json" \
    -d '{
        "match": [{"host": ["dynamic.example.com"]}],
        "handle": [{
            "handler": "reverse_proxy",
            "upstreams": [{"dial": "localhost:4000"}]
        }],
        "terminal": true
    }'

# 动态删除站点
curl -X DELETE localhost:2019/config/apps/http/servers/srv0/routes/0

日志查看 #

实时日志 #

bash
# systemd 服务日志
sudo journalctl -u caddy -f

# 查看最近日志
sudo journalctl -u caddy -n 100

# 查看特定时间段日志
sudo journalctl -u caddy --since "2024-01-01" --until "2024-01-02"

# 过滤日志
sudo journalctl -u caddy | grep "error"

文件日志 #

bash
# 查看访问日志
tail -f /var/log/caddy/access.log

# 查看错误日志
tail -f /var/log/caddy/error.log

# 实时查看 JSON 格式日志
tail -f /var/log/caddy/access.log | jq

常用操作示例 #

完整启动流程 #

bash
# 1. 验证配置
caddy validate --config /etc/caddy/Caddyfile

# 2. 格式化配置
caddy fmt --overwrite /etc/caddy/Caddyfile

# 3. 查看转换后的 JSON(可选)
caddy adapt --config /etc/caddy/Caddyfile --pretty

# 4. 启动服务
sudo systemctl start caddy

# 5. 查看状态
sudo systemctl status caddy

# 6. 查看日志
sudo journalctl -u caddy -f

配置更新流程 #

bash
# 1. 编辑配置文件
vim /etc/caddy/Caddyfile

# 2. 验证新配置
caddy validate --config /etc/caddy/Caddyfile

# 3. 重载配置(零停机)
caddy reload --config /etc/caddy/Caddyfile

# 或使用 systemd
sudo systemctl reload caddy

# 4. 验证效果
curl -I https://example.com

故障排查流程 #

bash
# 1. 检查服务状态
sudo systemctl status caddy

# 2. 查看日志
sudo journalctl -u caddy -n 50

# 3. 验证配置
caddy validate --config /etc/caddy/Caddyfile

# 4. 检查端口占用
sudo netstat -tlnp | grep caddy
sudo lsof -i :80
sudo lsof -i :443

# 5. 检查证书
curl localhost:2019/certificates | jq

# 6. 测试连接
curl -v https://example.com

命令速查表 #

命令 说明 示例
run 启动服务器 caddy run --config Caddyfile
stop 停止服务器 caddy stop
reload 重载配置 caddy reload --config Caddyfile
validate 验证配置 caddy validate --config Caddyfile
adapt 转换配置 caddy adapt --config Caddyfile --pretty
fmt 格式化配置 caddy fmt --overwrite Caddyfile
version 显示版本 caddy version
environ 显示环境变量 caddy environ
list-modules 列出模块 caddy list-modules
trust 信任证书 caddy trust

下一步 #

现在你已经掌握了 Caddy 的基本命令,接下来学习 静态资源服务 开始实际配置你的 Web 服务器!

最后更新:2026-03-28