本文介绍家庭宽带及VPS中部署caddy,实现反向代理、自动申请并续签证书、http自动跳转https等功能,可通过docker或裸跑二进制的方式部署
① 家庭宽带中通过docker部署
由于家庭宽带80 443端口被封,无法通过DNS验证的方式申请证书,需配合cloudflare DNS token申请证书,故只推荐通过docker安装
使用docker官方脚本一键安装docker,已安装docker的跳过
1
| curl -fsSL https://get.docker.com | bash -s docker
|
可选用阿里镜像仓库加速安装
1
| curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
|
创建好容器所需文件夹及文件
1 2 3
| mkdir -p /root/docker/caddy/data touch /root/docker/caddy/data/caddyfile.txt touch /root/docker/caddy/compose.yml
|
compose.yml内容如下,使用host模式会自动占用8080和55443端口(55443为公网访问时所加端口,可在配置文件中修改)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| version: '3' services: caddy: pull_policy: always image: sliamb/caddy:latest container_name: caddy restart: unless-stopped environment: - TZ=Asia/Shanghai - DNS=223.5.5.5,8.8.8.8 volumes: - ./data:/data - ./cert:/root/.local/share/caddy/certificates network_mode: "host"
|
修改caddyfile.txt配置文件
以下为配置示例,根据情况自行调整
- 格式参考如下,修改对应邮箱、dns_token、域名及服务地址
- 将caddy监听的https端口修改为55443,相对应的公网端口(即之后访问域名时候加的端口)也是55443,主路由做好wan端口55443到caddy 55443的映射。该端口根据自己需求修改即可。
- 配置模板内容依次为:反向代理pve等https连接、反向代理普通http连接、反向代理静态网页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| { email xxxxxx@qq.com acme_dns cloudflare xxxxxxxxxxxxxxxxxxxxxxx auto_https disable_redirects
http_port 8080 https_port 55443 servers { listener_wrappers { http_redirect tls } } }
XXXXXX.com:55443 { }
*.xxxxxxxxx.com:55443 {
@pve host pve.xxxxxxxxx.com handle @pve { reverse_proxy 10.10.10.2:8006 { transport http { tls_insecure_skip_verify } } }
@ikuai host i.xxxxxxxxx.com handle @ikuai { reverse_proxy 10.10.10.31 }
@ikuai host i.xxxxxxxxx.com handle @ikuai { reverse_proxy 10.10.10.32 { header_up Host {upstream_hostport} header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} } }
@password host password.xxxxxxxxx.com handle @password { basicauth / { rainbow $2a$14$ZTwlgDTKk38.53Z0QhkuJ.iwmOwnK1ggYs2O8M6eT0ivTwTeVXxVS } reverse_proxy 10.10.10.33 }
@www host chatgpt.你的域名.com handle @www chatgpt.你的域名.com { root * /usr/share/caddy file_server encode gzip }
handle { respond 404 } }
|
启动caddy
进入compose所在文件夹,使用“docker compose up -d”命令启动caddy
② 家庭宽带中通过官方二进制文件部署
自行安装好lxc,推荐ubutun22.04,建议换好国内源
安装带模块的caddy
由于家庭带宽中443端口被封,原版caddy无法申请证书,需使用附带cloudflare模块的caddy,通过配置dns token的方式申请证书,详细信息可参考官方文档
https://caddy2.dengxiaolong.com/docs/install
前往以下地址下载官方编译好带DNS模块的二进制文件(以cloudflare为例,若使用alidns、dnspod均有对应模块,自行勾选即可)
<https://caddyserver.com/download?
选择对应系统,勾选cloudflare模块,点击下载

参考官方文档,使用以下命令安装原版caddy
1 2 3 4 5
| sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https 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
|
先将下载的caddy二进制文件上传到 /root 目录,重命名为“caddy”,再使用下面命令覆盖原版文件
1 2 3
| systemctl stop caddy mv /root/caddy /usr/bin/caddy chmod +x /usr/bin/caddy
|
修改配置文件
配置文件位于 /etc/caddy/Caddyfile
1
| vim /etc/caddy/Caddyfile
|
1 2 3 4
| 输入 dG 清空内容(注意G是大写) 粘贴修改好的配置文件 按esc 输入:wq 保存退出
|
** 配置文件内容参考docker部分 **
修改完配置后重启caddy(每次修改配置后均需重启caddy)
查看caddy运行状态
caddy证书存放目录,可查看证书是否申请成功
1
| "/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/"
|
③ vps中部署caddy
依然建议使用docker部署caddy,vps环境下(80、443端口可用)使用官方原版即可正常申请证书
compose文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| services: caddy: image: caddy:latest container_name: caddy restart: unless-stopped networks: - caddy_docker_bridge ports: - "80:80" - "443:443" - "443:443/udp" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./html:/var/www/html - ./data:/data - ./config:/config volumes: caddy_data: caddy_config:
networks: caddy_docker_bridge:
|
配置文件Caddyfile内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| pve.你的域名.com { reverse_proxy https://172.16.0.254:8006 { transport http { tls_insecure_skip_verify } } }
omv.你的域名.com { reverse_proxy http://172.16.0.8:80 }
静态网页.你的域名.com { root * /var/www/html file_server encode gzip }
|