这两天可能中了甲流,因为做了抗原始终是一条杠
老婆是前天晚上开始发烧的,我则是从昨天中午开始的,昨晚是 37.8℃
,今早起来是 38℃
,症状就是肌肉酸痛,头有点昏昏沉沉的,公众号后台、博客上都积攒了不少提问的,等老苏缓过劲来再一一答复吧
前言
老苏 3
年前买的腾讯 vps
下个月要到期了,续费的话有点肉疼,毕竟它的作用只是为了写免费的教程
更何况因为 ml
域名的问题,也不能备案。那要再加上买域名,会是一笔不小的开支,对老苏这种还在努力搬砖的人来说,真是贵啊。
老苏自用比较简单,直接 Tailscale
,把子网路由一开,在哪访问都跟在家一样,但是写文的话,总有人问 npm
做反向代理的问题,老苏还是需要有个环境来验证。
本着能省则省的原则,老苏开始寻找相应的方案
解决方案
老苏脑子里第一个冒出来的念头就是用 Cloudflared
+ npm
的方式,理论上肯定是可行的,但是是否真的可行,会遇到什么坑,那只有实践了才知道
乘着五一有几天假期,终于把这个一直在脑子的念头实现了,感觉好像省了几个亿 😂
本文假设你已经会搭建 Cloudflared
和 Nginx Proxy Manager
,如果还不会的话,建议去看老苏写的相关文章,这里就不赘述了
-
免费的Cloudflared实现外网访问群晖
-
反向代理服务器nginx-proxy-manager
开始动手
在上篇 免费的Cloudflared实现外网访问群晖 中,我们是针对一个一个的域名做解析的,不仅要在本地修改 config.yaml
文件,还要去 Cloudflare
的 DNS
里添加子域名的CNAME
记录,实在是有点烦人
既然要弄,就要把痛点解决掉才有意义 💪
泛域名解析
Cloudflared
是支持泛域名解析的,只要在域名 laosu.ml
域名下面添加两条 CNAME
记录
类型 | 名称 | 目标 |
---|---|---|
CNAME | @ | <隧道 UUID>.cfargotunnel.com |
CNAME | * | <隧道 UUID>.cfargotunnel.com |
目的是将 a.laosu.ml
、b.laosu.ml
、c.laosu.ml
等等的域名请求,都发给 <隧道 UUID>.cfargotunnel.com
config.yaml
接下来要修改 config.yaml
文件,修改前是👇下面这样的
tunnel: <隧道 UUID>
credentials-file: /root/.cloudflared/<隧道 UUID>.json
ingress:
- hostname: a.laosu.ml
service: http://192.168.0.199:8180
- hostname: b.laosu.ml
service: http://192.168.0.199:7123
- hostname: c.laosu.ml
service: http://192.168.0.199:9000
- service: http_status:404
修改后,只需要一条记录
tunnel: <隧道 UUID>
credentials-file: /root/.cloudflared/<隧道 UUID>.json
ingress:
- hostname: "*.laosu.ml"
service: http://192.168.0.199:2080
- service: http_status:404
目的就是将 <隧道 UUID>.cfargotunnel.com
的请求,都转发给 Nginx Proxy Manager
的 2080
端口
npm 的设置
以老苏的测速服务为例,本地访问地址为 http://192.168.0.199:8180
主机设置是跟之前一样的
但是 SSL
不同,不要设置证书
因为默认情况下, Cloudflared
是自带证书的,npm
中再设置证书,反而会导致 ERR_TOO_MANY_REDIRECTS
错误
所以不要设置证书才可以正常访问
顺便测个速
比之前老苏的 1M
小水管强多了,而且再也不用带尾巴访问了,截端口问题也一劳永逸的解决了
用来写教程,Cloudflared
的免费套餐已经足够用了
安全性
安全性方面,你可以结合 Cloudflare
的 Zero Trust
来设置存取规则
老苏设置了邮件验证,所以当访问 https://speed.laosu.ml
时,会弹出右键地址输入框
当然只添加了自己的邮箱
邮件中会收到验证码
填写正确的验证码之后就可以看到你访问的站点了
为了一劳永逸,针对的Application URL
也是用的 *.laosu.ml
小结
所以后续,每次增加一个服务,只要在 npm
中 Add Proxy Host
,然后填写 Domain Names
、IP
和 Port
就可以了,是不是够简单了?
如果你访问的域名在 npm
中没有设置,例如 https://sp.laosu.ml
,你会看到
免费的东西总归会有限制的,如果您的应用程序需要传输大量数据或高带宽连接,使用 Cloudflare Tunnel
可能就不是最佳选择了。
参考文档
免费的Cloudflared实现外网访问群晖 | 老苏的blog
地址:https://laosu.ml/2022/04/06/免费的Cloudflared实现外网访问群晖
Using Cloudflare Tunnel with Nginx Proxy Manager : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/wpvy8c/using_cloudflare_tunnel_with_nginx_proxy_manager/