Caddy 简介

Caddy 是一个用 Go 语言编写的现代 Web 服务器,其最大特点是默认自动启用 HTTPS。当你为域名配置 Caddy 时,它会自动向 Let's Encrypt 申请 SSL 证书,并在证书到期前自动续期,全程无需人工干预。

与 Nginx 或 Apache 相比,Caddy 的配置文件 Caddyfile 语法更加简洁直观。托管一个静态网站只需要三行配置,配置反向代理也只需要一行指令。

一、安装 Caddy

1. Linux(官方脚本安装 - 推荐)

这是最简单的方式,会自动配置系统服务:

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 apt update
sudo apt install caddy

CentOS/RHEL 用户使用 yumdnf 类似流程,可参考官方文档。

2. Rocky Linux / RHEL 系

sudo dnf update
sudo dnf install -y epel-release
sudo dnf copr enable @caddy/caddy
sudo dnf install -y caddy

3. macOS(Homebrew)

brew install caddy

4. Docker

docker run -d \
  --name caddy \
  -p 80:80 \
  -p 443:443 \
  -p 443:443/udp \
  -v /path/to/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy_data:/data \
  -v caddy_config:/config \
  caddy:latest

5. Windows

GitHub Releases 下载 .zip 文件,解压到任意目录(如 C:\caddy),在 PowerShell 中运行 .\caddy.exe version 测试。


二、配置防火墙

安装完成后,需要开放 HTTP 和 HTTPS 端口:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

三、Caddyfile 配置详解

Caddy 的配置文件名为 Caddyfile,默认位于 /etc/caddy/Caddyfile

1. 静态文件服务器(最简配置)

example.com {
    root * /usr/share/caddy/example.com
    file_server
}

example.com 替换为指向你服务器的域名。Caddy 会自动为该域名申请 HTTPS 证书。

2. 反向代理

example.com {
    reverse_proxy localhost:8000
}

将请求转发到本地 8000 端口的后端服务。

3. 反向代理 HTTPS 后端(跳过证书验证)

example.com {
    reverse_proxy https://192.168.0.1:1234 {
        transport http {
            tls_insecure_skip_verify
        }
    }
}

适用于后端使用自签名证书的场景。

4. 修改监听端口

{
    http_port 8080
}

example.com {
    reverse_proxy localhost:3000
}

5. 多个站点配置

site1.com {
    root * /var/www/site1
    file_server
}

site2.com {
    reverse_proxy localhost:3000
}

四、常用命令

命令说明
caddy run前台运行 Caddy
caddy run --config /path/to/Caddyfile指定配置文件运行
caddy reload --config /etc/caddy/Caddyfile --force重新加载配置
caddy version查看版本

通过 systemd 管理(生产环境推荐)

sudo systemctl daemon-reload
sudo systemctl enable --now caddy
sudo systemctl status caddy
sudo systemctl restart caddy   # 重启
sudo systemctl reload caddy    # 重载配置

五、补充:二进制手动安装(可选)

如果需要手动安装二进制文件:

# 下载 Caddy 二进制文件(从 https://caddyserver.com/download)
sudo mv caddy /usr/bin/
sudo mkdir /etc/caddy
sudo cp Caddyfile /etc/caddy/Caddyfile

# 创建 caddy 用户
sudo groupadd --system caddy
sudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin --comment "Caddy web server" caddy

# 创建 systemd 服务文件 /etc/systemd/system/caddy.service

六、常见问题

1. 自动 HTTPS 失败怎么办?

  • 确保域名已正确解析到服务器公网 IP
  • 确保 80 和 443 端口对外开放
  • 内网环境无法自动申请证书时,可手动指定证书

2. 如何查看日志?

Caddy 日志默认输出到 systemd journal,可用以下命令查看:

sudo journalctl -u caddy -f

3. 配置文件语法检查?

caddy validate --config /etc/caddy/Caddyfile

标签: caddy, caddy反向代理

添加新评论