作者: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/
1、新建程序所需文件夹
在群晖的docker目录下新建nginx-proxy-manager文件夹,并在此目录下再新建data和letsencrypt两个文件夹
data用于存放主程序、运行数据、配置、日志等
端口设置:
443端口:用于代理https端口,容器端口保持443,本地端口自定义即可,如11443
80端口:用于代理http端口,容器端口保持80,本地端口自定义即可,如11080
81端口:用于访问该程序的web管理页面,容器端口保持81,本地端口自定义即可,写81也可以
说明:443和80的对应的本地端口建议不要写443和80,这俩端口网络运营商通常会封锁。
存储空间映射:
点击添加文件夹,将刚刚新建的两个文件夹分别映射到这两个路径:
/data
外部端口:填写你外网访问时希望以哪个端口访问
内部端口:填写上面自定义的https端口号(即443前面填写的本地端口)
IP地址:填写你群晖的内网IP地址 通常是:192.168.x.x
协议类型:TCP
Domain Names:输入框中输入泛域名,如:*.xxx.com(xxx.com是指你的域名)
Email Address:填写你申请let's encrypt证书时想使用的邮箱,填一个你自己的邮箱即可
Use a DNS Challenge:打开此选项,在DNS Provider中,选择你的域名DNS解析提供商,并在下面填入你的云服务商的密钥(SECRET_ID和SECRET_KEY),如果之前没创建过需要创建,如果有则用之前的即可。
Domain Names:填写你希望以什么二级域名进行访问对应的内网服务,比如你想以jellyfin.abc.com(abc.com是指你的域名)访问jellyfin服务,则填写:jellyfin.abc.com
Scheme:如果你要访问的内网服务是http,则选http
Forward Hostname/IP:填写你的群晖的局域网内网IP,这里也可以填IPv6的地址
Forward Port:填写你希望代理的服务的本地端口。不同服务的端口可在docker中查看,如jellyfin本地端口通常是8096
下面的几个选项建议勾上
默认管理员用户及密码:
Email:admin@example.com
这一步公网ipv4需要设置,ipv6不需要设置
服务部署好以后,我们可以将其他群晖的应用程序或docker部署服务都只通过Nginx-Proxy-Manager的端口来进行访问,因此需要去到路由器将之前设置的本地https端口放开,即443前面填写的本地端口。
这里我们举个例子:
五、申请泛域名证书
设置完泛域名解析后,回到Nginx Proxy Manager,选择SSL Certificates(SSL 证书)标签,点击Add SSL Certificate(添加SSL证书),选择Let‘s Encrypt申请泛域名证书
如何创建/查阅秘钥:
腾讯云:https://console.dnspod.cn/account/token/apikey
阿里云:https://ram.console.aliyun.com/manage/ak?spm=5176.12818093.nav-right.dak.488716d0mHaMgg
最后,我们要实现的是群晖的应用程序/docker各项服务直接通过二级域名加密访问。
填写说明:
额外补充:
举个例子:
你添加代理时Domain Name写的是jellyfin.abc.com,你在前面路由器端口映射外网端口写的是11443,你就通过https://jellyfin.abc.com:11443,就可以访问你的jellyfin服务了,而且都是加密访问的。
后续如果你还想添加其他二级域名代理访问其他服务,则在Nginx Proxy Manager中添加新的反向代理设置即可,访问的时候的端口号都是你在路由器设置端口映射时填写的外网端口。
这样我们开篇说的三个目标都达成了:
1、群晖中所有程序和docker服务都可以通过这个方法进行加密访问,甚至局域网内任意一台设备都可以
2、获得免费证书且自动续期,无限续杯
3、只放开一个端口,实现二级域名访问各项服务