内网穿透之后,由于访问方式是http形式,感觉总不安全,想着给内网添加https增加安全性,在clodflare上解析内网地址,内网主机上安装npm进行反代,这种方式经过测试是可以的。但是由于我的N1-armbian服务器rom只有8GB,npm的镜像占用1G多,测试完就删除了。于是就换了caddy进行反代,但是官方的docker镜像不带有cloudflare模块,如果需要dns-api方式申请证书则需要重新编译。最后build之后还是空间不足,奈何还是记录一下。
环境准备
首先安装xcaddy,安装xcaady之前需要配置go环境,下载地址
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
构建包含 Cloudflare 插件的 Caddy 镜像
xcaddy build --with github.com/caddy-dns/cloudflare
创建 Dockerfile来构建 Caddy 镜像,使用刚刚构建的 Caddy 二进制文件
FROM caddy:builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/cloudflare
FROM caddy:latest
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
构建并运行自定义 Caddy 镜像
docker build -t caddy-cloudflare .
Docker compose配置
使用docker images查看构建的镜像,编辑 docker-compose.yml
,同时需要在当前目录新建一个.env文件,内容为CLOUDFLARE_API_TOKEN=your_cloudflare_api_token
version: "3.7"
services:
caddy:
image: caddy-cloudflare
restart: unless-stopped
cap_add:
- NET_ADMIN
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- $PWD/Caddyfile:/etc/caddy/Caddyfile
- $PWD/site:/srv
- ./caddy_data:/data
- ./caddy_config:/config
env_file:
- .env
Caddyfile配置
example.com {
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
reverse_proxy 192.168.x.x:port
}
后续
既然caddy自动申请内网证书失败,为何不指定证书不让它再去申请呢。按照这个思路,通过acme使用dns-01的方式申请完成后再使用,经过折腾最后也成功了。重新配置一下。证书申请详见Acme申请证书,证书申请最好有科学上网的环境,不然很可能会失败。
version: "3.7"
services:
caddy:
image: caddy:latest
restart: unless-stopped
cap_add:
- NET_ADMIN
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- $PWD/Caddyfile:/etc/caddy/Caddyfile
- $PWD/site:/srv
- ./caddy_data:/data
- ./caddy_config:/config
- /etc/acme/a.example.xyz_ecc:/etc/acme
a.example.xyz {
tls /etc/acme/fullchain.cer /etc/acme/a.example.xyz.key
reverse_proxy 192.168.x.x:port
}