为 Clash 订阅链接服添加免费 SSL 证书
前言
五一假期宅家,计划重新部署一套 v2-ui 作为备用,另外部署 sub-web 和 subconver 来生成 Clash 订阅链接,根据官方文档描述 Caddy2 可以从 letsencrypt 申请免费证书,但申请时却提示失败,后面了解到 acme.sh,所以才有这篇水文。
服务部署
前置部署
curl -sSL https://get.docker.com/ | sh // Install Docker
apt install nginx // Install Nginx
apt install -y nodejs // Install node 为了本地测试
npm install --global yarn // Install yarn 为了本地测试
v2-ui
参考官方 README 部署
bash <(curl -Ls https://blog.sprov.xyz/v2-ui.sh)
subconverter
subconverter 是用来制作 Clash 订阅链接的后端 API,参考官方 README docker 部署
docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest
sub-web
sub-web 是 subconverter 的可视化前端界面,推荐 folk 之后修改 .env 后端默认 API 为上面部署 subconverter ip/域名,最后部署到 Vercel/Netlify
通过 DNS API 从 letsencrypt 申请证书
首先在 Cloudflare 把域名解析指向到部署服务的 VPS IP,接着参考官方文档安装 acme.sh
curl https://get.acme.sh | sh
这边使用的是 DNS API 申请证书,域名是在 Cloudflare 下管理,参考官方文档进行申请
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="[email protected]"
acme.sh --issue --dns dns_cf -d example.com -d www.example.com //正确运行后会显示证书路径
Nginx 反向代理
Example
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/your/cer/xxx.cer;
ssl_certificate_key /path/to/your/key/xxx.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:65432;
}
location /rss {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:20932/rss;
}
location /sub {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:25500/sub;
}
}
最后
可以通过访问部署的 sub-web 来愉快地生成 Clash 订阅链接了