之前我的网站一直通过 Cloudflare 代理 实现 HTTPS,但由于 CF 在中国的访问速度波动较大,不够稳定,因此我开始寻找其它方案。感谢 @eee_CY 的方法与支持,让我找到了更优解。

背景问题

最初我咨询了 ChatGPT,它建议我开一个 type = tcp 的隧道,但这种方式需要服务器端部署证书,而且无法使用标准的 443 端口。

在请教了 @eee_CY 之后,我发现了 plugin = https2http 这个更合适的方案:只需要在本地部署一个自动续期脚本,之后就可以完全“放手不管”了。


配置过程(支持 Termux)

我使用的是 acme.sh 来申请并自动续期证书。

1. 安装 acme.sh

使用以下命令安装:

curl https://get.acme.sh | sh

然后在 ~/.bashrc 中添加路径环境变量:

export PATH="$HOME/.acme.sh":$PATH
source ~/.bashrc

2. 注册账户

acme.sh --register-account -m your@email.com

3. 暂停占用 80 端口的服务

例如 Apache:

apachectl stop

否则你可能会遇到以下报错:

Cannot init API for: https://acme-v02.api.letsencrypt.org/directory

4. 申请证书

acme.sh --issue --standalone -d <你的域名>

⚠️ 注意坑点:ZeroSSL 限制

如果遇到:

retry-after=86400

这是 ZeroSSL 的限制,建议立刻切换为 Let’s Encrypt:

acme.sh --set-default-ca --server letsencrypt

5. 安装证书到指定位置

acme.sh --install-cert -d <你的域名> \
--key-file       ~/frp-cert/privkey.pem \
--fullchain-file ~/frp-cert/fullchain.pem \
--reloadcmd      "pkill -HUP frpc"
--reloadcmd 会在证书更新后重载 frpc,确保自动生效。

6. 自动更新证书

可以使用 cron 实现自动续期,但在 Termux 中配置 Cron 有些繁琐。
我选择了更适合 Android 的工具:Tasker 来定期运行更新脚本。


frp 配置(使用 https2http Plugin)

设置一个 type = https 的隧道,并重点加上以下配置:

type = https
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_crt_path = /data/data/com.termux/files/home/frp-cert/fullchain.pem
plugin_key_path = /data/data/com.termux/files/home/frp-cert/privkey.pem
plugin_host_header_rewrite = <你的域名>

然后 启动 Apache 与 frp 即可

apachectl start
frpc

总结

通过这个方案:

  • 不再依赖 Cloudflare;
  • 证书自动续期;
  • 网站加载速度:15s -> 3s;

终于不再受 Cloudflare 时快时慢的寸止折磨了 icon_lol.gif

标签: frp, 网站

仅有一条评论

  1. 这个不错,不过还是建议有条件上云或者家里云,买个小主机放着,我就是这样,另外只要有公网IPv6+刷光猫关掉防火墙和限制,可以做到任意CDN回源。

添加新评论

登录后评论