作者:wiibilsong
前面我花了两篇约7000字详细介绍了IPv4或者IPv6下应该如何实现外网加密访问家里的群晖,强烈建议新手先看完那两篇文章。
虽然上述的方式已经实现了外网加密访问,不过还有些不完美:
通常我们的群晖NAS会安装许多套件或docker服务,这些应用或服务如何也能都实现加密访问呢?
阿里云或腾讯云申请的免费证书都有有效期限制,特别是阿里云的免费证书只有三个月有效期,每三个月得折腾一遍也够烦人的,有没有能够一直自动续期的方法呢?
还有就是通过端口映射开放各项服务的访问,每项服务都需要开放一个端口,理论上端口放开越多安全性越低,能不能通过设置不同的二级域名访问各项服务呢?
答案是YES!而且一个工具全搞定,那就是今天要介绍的主角:Nginx Proxy Manager
说明:以上各项需求也可以自行逐一搞定,比如你也可以直接使用Nginx搞定反向代理;当然你也可以通过代码自动证书续期,当然也有其他工具全都能实现,比如国人开发的lucky。大家可以根据自己的需要去选择使用工具。之所以我个人选择Nginx Proxy Manager,一方面它能覆盖我的主要需求,还有就是它界面UI美观以及免费开源。
一、Nginx Proxy Manager介绍
Nginx Proxy Manager 是一个 Nginx 图形化面板,能让用户在 Web 界面上轻松配置反向代理、申请网站 SSL 证书,而无需了解过多 Nginx / Letsencrypt 的底层原理。
官网及介绍:https://nginxproxymanager.com/
GitHub项目:https://github.com/NginxProxyManager/nginx-proxy-manager
二、部署Nginx Proxy Manager
1、新建程序所需文件夹
在群晖的docker目录下新建nginx-proxy-manager文件夹,并在此目录下再新建data和letsencrypt两个文件夹
data用于存放主程序、运行数据、配置、日志等
letsencrypt用于存放letsencrypt的程序等
2、在docker(Container Manager)中安装
第一步:在注册表中搜索:nginx-proxy-manager,jc21/nginx-proxy-manager是原版,chishin/nginx-proxy-manager是翻译版本,大家根据需求选择即可,双击进行映像文件的下载。
第二步:在映像中,选择jc21/nginx-proxy-manager,点击左上角的运行
第三步:进行配置:
勾选自动重新启动
端口设置&映射目录
端口设置:
443端口:用于代理https端口,容器端口保持443,本地端口自定义即可,如11443
80端口:用于代理http端口,容器端口保持80,本地端口自定义即可,如11080
81端口:用于访问该程序的web管理页面,容器端口保持81,本地端口自定义即可,写81也可以
说明:443和80的对应的本地端口建议不要写443和80,这俩端口网络运营商通常会封锁。
存储空间映射:
点击添加文件夹,将刚刚新建的两个文件夹分别映射到这两个路径:
/data
/etc/letsencrypt
然后下一步,检查一下配置项,没错就点完成配置。容器启动以后打开浏览器访问http://群晖内网ip:81 进入管理页面
默认管理员用户及密码:
Email:admin@example.com
Password: changeme
3、进入以后先修改登录邮箱和密码
三、路由器放开自定义的本地端口
这一步公网ipv4需要设置,ipv6不需要设置
服务部署好以后,我们可以将其他群晖的应用程序或docker部署服务都只通过Nginx-Proxy-Manager的端口来进行访问,因此需要去到路由器将之前设置的本地https端口放开,即443前面填写的本地端口。
(如果你不打算以http进行访问的话,80对应的本地http端口可以不放开;81对应的是web管理界面端口,也可以不放开)
路由器的端口放开方法:找到路由器端口映射/端口转发/虚拟服务器功能,添加一条记录:
外部端口:填写你外网访问时希望以哪个端口访问
内部端口:填写上面自定义的https端口号(即443前面填写的本地端口)
IP地址:填写你群晖的内网IP地址 通常是:192.168.x.x
协议类型:TCP
这里我们举个例子:
假如你在配置docker容器时,映射443端口的本地端口写的是11443,在路由器端口映射中内部端口就一定要填11443,外部端口如果写的也是11443,则你在外网访问时,需要在域名后面加的端口就是11443
四、设置泛域名动态域名解析
在群晖中打开DDNS-GO套件,在ipv4/ipv6的domains中,填写*.xxx.com(xxx.com是指你的域名),这样访问任何一个二级域名都会解析到你的公网IP。
说明:不知道什么是动态域名解析,为什么要设置动态域名解析,怎么使用动态域名解析,建议去看我之前写的文章:《如何通过域名在外网加密访问家里的群晖NAS(上篇)》《如何通过域名在外网加密访问家里的群晖NAS(下篇)》
五、申请泛域名证书
设置完泛域名解析后,回到Nginx Proxy Manager,选择SSL Certificates(SSL 证书)标签,点击Add SSL Certificate(添加SSL证书),选择Let‘s Encrypt申请泛域名证书
说明:泛域名证书的好处就是不用每个二级域名都单独申请证书,所有的二级域名都可以用这同一个证书
填写说明:
Domain Names:输入框中输入泛域名,如:*.xxx.com(xxx.com是指你的域名)
Email Address:填写你申请let's encrypt证书时想使用的邮箱,填一个你自己的邮箱即可
Use a DNS Challenge:打开此选项,在DNS Provider中,选择你的域名DNS解析提供商,并在下面填入你的云服务商的密钥(SECRET_ID和SECRET_KEY),如果之前没创建过需要创建,如果有则用之前的即可。
如何创建/查阅秘钥:
腾讯云:https://console.dnspod.cn/account/token/apikey
阿里云:https://ram.console.aliyun.com/manage/ak?spm=5176.12818093.nav-right.dak.488716d0mHaMgg
Cloudflare:https://dash.cloudflare.com/profile/api-tokens
最后同意协议,点击保存之后他便会去帮你申请证书。申请的证书是3个月有效期的,不过在证书到期之前,他会自动帮你重新申请续期,因此相当于你拥有了一个永久证书。
五、添加反向代理
最后,我们要实现的是群晖的应用程序/docker各项服务直接通过二级域名加密访问。
第一步:点击Hosts标签,选择Porxy Hosts,在右侧点击Add Proxy Host
第二步:Details信息填写
填写说明:
Domain Names:填写你希望以什么二级域名进行访问对应的内网服务,比如你想以jellyfin.abc.com(abc.com是指你的域名)访问jellyfin服务,则填写:jellyfin.abc.com
Scheme:如果你要访问的内网服务是http,则选http
Forward Hostname/IP:填写你的群晖的局域网内网IP,这里也可以填IPv6的地址
Forward Port:填写你希望代理的服务的本地端口。不同服务的端口可在docker中查看,如jellyfin本地端口通常是8096
下面的几个选项建议勾上
额外补充:
这里其实不仅能反代群晖内的服务,也可以代理你局域网内任意一台设备,比如你希望外网能访问路由器,可以新建一条代理,Forward Hostname/IP填路由器的内网IP,端口通常是80,看你自己是否需要。
第三步:SSL设置
切换到SSL标签,在SSL Certificate中,选择前面申请好的泛域名证书,下发其他选项都建议勾选,点击保存
这时候,不出意外的话,你通过https://二级域名:https本地端口,就可以访问到你设置好反向代理的服务了。
举个例子:
你添加代理时Domain Name写的是jellyfin.abc.com,你在前面路由器端口映射外网端口写的是11443,你就通过https://jellyfin.abc.com:11443,就可以访问你的jellyfin服务了,而且都是加密访问的。
后续如果你还想添加其他二级域名代理访问其他服务,则在Nginx Proxy Manager中添加新的反向代理设置即可,访问的时候的端口号都是你在路由器设置端口映射时填写的外网端口。
这样我们开篇说的三个目标都达成了:
1、群晖中所有程序和docker服务都可以通过这个方法进行加密访问,甚至局域网内任意一台设备都可以
2、获得免费证书且自动续期,无限续杯
3、只放开一个端口,实现二级域名访问各项服务
写文章不易,如果觉得对你有帮助的话,还请帮忙关注、点赞、收藏,如果有疑问可以在评论区留言交流。
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有