手动编译Caddy和部份插件

首先需要确保golang版本在1.20及以上,可以用以下命令查询:

go version

若满足条件,执行以下命令编译Caddy:

go env -w GO111MODULE=on

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

~/go/bin/xcaddy build \
        --with github.com/caddyserver/forwardproxy=github.com/klzgrad/forwardproxy@naive \
        --with github.com/caddy-dns/alidns \
        --with github.com/caddy-dns/cloudflare

若编译成果,会在当前目录下出现caddy文件,将它移动到bin目录:

mv caddy /usr/bin/

创建服务文件,caddy.service并将其移动到/etc/systemd/system下:

[Unit]
Description=Caddy2
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=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
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target

创建/etc/caddy/Caddyfile文件,根据需要修改相关内容,如tls、basic_auth等:

:443, example.com {
  #tls /path/xxx.crt /path/xxx.key
  tls {
    dns cloudflare {
      zone_token xxx
      api_token xxxx
    }
    resolvers 1.1.1.1
  }
  route {
    forward_proxy {
      basic_auth username password
      hide_ip
      hide_via
      probe_resistance
    }

    root * /var/www/html
    encode gzip zstd
    php_fastcgi unix//run/php/php8.3-fpm.sock
    file_server
  }
}

格式化Caddyfile(可选):

caddy fmt --overwrite /etc/caddy/Caddyfile

使用命令启用服务并启动caddy,查看状态:

systemctl enable caddy
systemctl start caddy
systemctl status caddy