caddy2.10.0正式版本 已经加入了ECH的支持

要使用caddy自动配置ech则需要编译cloudflare dns插件

编译caddy并加入cloudflare DNS插件的支持

1:一键安装go环境

bash <(curl -sSL https://cdn.jsdelivr.net/gh/sky22333/shell@main/go.sh)

2:下载xcaddy

go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

3:编译带cloudflare dns插件的caddy

xcaddy build --with github.com/caddy-dns/cloudflare

此时你的当前目录会生成一个已经包含了cloudflare dns插件的caddy二进制文件

debug模式测试运行

创建/etc/caddy/Caddyfile文件,并写入以下文件

{
    debug
    dns cloudflare xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    ech ech.example.com

    log {
        output stdout
        format console
        level DEBUG
    }
}

test.example.com {
    root * /tmp
    file_server browse
    encode zstd gzip
}

配置说明

dns cloudflare这个配置填CF的区域 DNS API 令牌

ech ech.example.com这里的域名应该使用公共域名,要跟你域名无关的,所以可以无需修改

test.example.com替换你的域名,并且解析到你的IP,不用开小黄云

root * /tmp这个配置代表以网页浏览文件的形式,浏览你服务器的/tmp目录

启动caddy

sudo ./caddy run --config /etc/caddy/Caddyfile --adapter caddyfile

不出意外的话就启动成功了,然后可以访问你的域名看下是否能成功访问

并且/root/.local/share/caddy目录会生成一个锁文件,如果需要重新部署则需要删除这个目录

CF里也会自动添加一个类型为HTTPS的解析记录

检查ech是否配置成功

dig test.example.com TYPE65

执行这个命令后,在输出的信息里可以看到有如下类似的信息就代表启用成功

ech=AEr+DQBGlwAgACBVSsnixVAfd/Ca9HP9JTf2O+B1kynOkZIwAMASDASDQABAAIASDASDADHw9lY2guZXhhbXBsZS5jb20AAA==

生产环境

移动二进制文件

mv ~/caddy /usr/bin/caddy

创建系统服务配置

touch /etc/systemd/system/caddy.service

写入配置

[Unit]
Description=Caddy Web Server
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Wants=network-online.target

[Service]
User=root
Group=root
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

管理命令

# 重新加载 systemd 配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload

# 启动 Caddy
sudo systemctl start caddy

# 设置开机启动
sudo systemctl enable caddy

# 查看运行状态
sudo systemctl status caddy

生产环境反代配置示例

{
	dns cloudflare xxxxxxxxxxxxxxxxxxxxx
	ech ech.example.com
}

test.example.com {
	reverse_proxy localhost:8080
}

重新部署记得删除:/root/.local/share/caddy锁文件,和CF里的HTTPS解析记录

❤️转载请注明出处❤️