要反向代理内网的网站,主要难点来自于caddy默认的HTTP-01证书获取模式是没法使用的(因为域名指向内网,而认证服务器显然没法访问内网地址),需要走DNS-01模式。本文主要以腾讯云(dnspod)为例,介绍如何将腾讯云dns模块编译进caddy中并完成认证过程。
科学上网
腾讯云dns模块在github上。总所周知,裸连github是个非常玄学的事情,强烈建议提前准备魔法上网并将http/https代理写入source中以避免天朝特有的网络问题。
1 | # 编辑文件 ~/.bashrc |
加载source
1 | source ~/.bashrc |
安装Go && 编译工具 (xcaddy)
Caddy官方的编译工具 xcaddy
需要go语言环境,请参考https://go.dev/wiki/Ubuntu安装。
1 | go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest |
指定dns模块编译caddy
1 | ~/go/bin/xcaddy build --with github.com/caddy-dns/tencentcloud |
其中,命令里–with后填入要编译的模块仓库,请自行替换为你需要的dns挑战模块。
可同时添加多个模块,如:
1 | xcaddy build --with github.com/user/module1 --with github.com/user/module2 |
验证编译结果
1 | ~/go/bin/caddy list-modules | grep tencentcloud #替换成你的模块名 |
如果出现了你要的模块,证明编译成功了,接下来就是把这个二进制文件替换原有的二进制文件。
二进制替换
1 | sudo systemctl stop caddy # 停止caddy服务 |
修改你的caddy配置
请你参考你的dns模块README修改你的caddy配置文件,如腾讯云(dnspod)是这样填的:
1 | # 修改这里的全局配置,如果没有全局配置自行添加即可 |
搞好啦,撒花~ ★,°:.☆( ̄▽ ̄)/$:.°★ 。