使用Caddy+Cloudflare模块自动给泛解析二级域名提供SSL支持
1.获得CloudFlare ApiToken
首先需要在cloudflare中添加一个支持域名dns操作的API Token,这里不做过多阐述。
2.设置caddy的服务变量
mkdir -p /etc/systemd/system/caddy.service.d
新建env.conf
文件
[Service] Environment="CLOUDFLARE_API_TOKEN={YOURTOKEN}"sh
设置好服务变量后会要求重启服务。
systemctl daemon-reload
2.安装cloudflare模块
链接:https://caddyserver.com/docs/modules/dns.providers.cloudflare
需要注意的是,由于模块被打包到caddy中,我们只能替换caddy,而不是像apache那样插件化的引入模块,但是由于其是Golang开发打包成的二进制文件,运行性能很优秀。
从这里下载带有模块的caddy文件:https://caddyserver.com/download
下载成功后设置权限并检查版本并最终替换原文件
chmod +x caddy #设置权限 ./caddy version #验证文件,这里应该会得到正确的caddy版本 mv /usr/bin/caddy /usr/bin/caddy.bak #备份旧的caddy文件 cp ./caddy /usr/bin/caddy #复制新文件到bin目录 chmod +x /usr/bin/caddy #设置权限
验证cloudflare模块是否已经包含
caddy list-modules | grep -i cloudflare dns.providers.cloudflare #正确显示
最终重启服务(查看状态)
sudo systemctl daemon-reload sudo systemctl restart caddy sudo systemctl status caddy #可选
3.Caddyfile配置
tls [email protected] { # 使用 cloudflare 插件,引用环境变量中的 token dns cloudflare {env.CLOUDFLARE_API_TOKEN} }
验证Caddyfile语法
caddy validate --config /etc/caddy/Caddyfile
正确的结果应该会看到Valid configuration
4.可能遇到的问题
文件权限问题,如果caddy没有目录的权限会出现无法启动服务的问题。
需要使用chown -R caddy:caddy /path/to/project
来设置权限。
同时还需要注意后端程序的运行权限,以php-fpm为例:chown -R www-data:www-data /path/to/project
需要注意的是它们需要统一用户组,设置方法参考:https://towait.com/blog/2639/