Skip to main content

为 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 订阅链接了

Reference