群晖Docker,走起! 篇十五:群晖搭建 nginx-proxy-manager,个人最推荐的反代工具
前面在介绍群晖使用的时候,一直都在介绍群晖自带的代理工具,很多小伙伴在文章下留言,说试试Lucky这个反向代理工具,这个代理工具前面老宁也有过介绍,它集成了DDNS、端口转发、ACME自动证书等等功能,用起来也非常简单。但是它并不开源,老宁多多少少还是有一些顾虑,所以一直都是用的另一款反向代理工具: nginx-proxy-manager (https://github.com/NginxProxyManager/nginx-proxy-manager)
方向代理
前面有文章简单的介绍了什么是反向代理,为了便于理解后面的概念,再来详细的介绍下这个概念
反向代理,是在服务器端设立代理服务,接收来自客户端的请求后,将请求转发给内部网络中的服务器,并将服务器的响应结果返回给客户端
来详细探索一下,当平时通过域名访问网站时,背后究竟发生了什么
用户通过浏览器输入一个URL,比如 "laoning.com:8080",这个URL地址就会被解析到代理服务器的公网IP地址
反向代理服务器接收到用户的请求后,根据预先的配置规则,将请求转发给内部网络的某个服务器。它可能根据请求的路径、请求的查询参数或请求头等信息,决定应该将请求转发给内部的哪台服务器
内部服务器处理完用户的请求后,将响应结果返回给反向代理服务器
反向代理服务器最后将接收到的响应结果返回给用户的浏览器
来解答下上面的几个疑惑:
为什么平时通过域名访问网站并没有加上类似8080这样的端口号?对于HTTP服务,默认的端口号是80;对于HTTPS服务,默认的端口号是443。浏览器会根据访问协议(HTTP还是HTTPS)自动使用相应协议的默认端口,HTTP为80,HTTPS为443。因此,如果服务器是在默认端口上提供服务,就不用加端口号,而80、443之外的端口就必须要添加上端口号
URL地址(域名)如何就访问解析到家里(服务器)的设备?DNS服务可以帮助计算器通过域名获取到IP(可以看我DDNS那篇文章)
当我们访问微信、淘宝都是一样的原理,如果没有代理服务器提供负载均衡等功能,只有一台服务器给10多亿用户提供服务,一旦服务器挂了,那么所有人都无法聊天了。代理服务器的后面都是有很多的服务器,它们内部之间也会进行数据交互,比如一台挂了,其他的服务器会顶上,或者直接把工作转移到正常的服务器
Nginx Proxy Manager
Nginx Proxy Manager是一个管理 Nginx 和 Let‘s Encrypt 的Docker容器,而 Nginx 就是一个免费、开源的,高性能的HTTP和反向代理服务器。所以在 Nginx Proxy Manager 中进行反向代理的设置,其实都是设置的 Nginx 配置文件
安装
打开群晖的【Container Manager】,搜索nginx-proxy-manager,点击jc21/nginx-proxy-manager镜像,选择最新版本进行下载
在等待下载过程中,先创建好 nginx-proxy-manager 数据存放的目录。创建npm文件夹,并在该文件夹下分别创建data和letencrypt目录,分别存放nginx配置文件和ssl证书相关文件。这里的npm是nginx-proxy-manager的缩写,并不是Node.js的包管理工具,不要搞混了!
回到Container Manager套件,运行刚刚下载好的nginx-proxy-manager镜像。分别给443、80、81端口添加映射,因为一般家庭宽带的443、80都是被运营商封锁的,所以不能同样以443、80进行映射。81为nginx-proxy-manager管理页面使用的端口,443、80为https、http服务的端口
存储空间需要添加刚刚创建的data、letsencrypt文件夹,分别对应容器的/data、/etc/letsencrypt路径。data文件夹里存放的就是 nginx 的配置文件
其他设置不用更改,直接运行容器。现在用浏览器打开【群晖IP:16081】就能看到nginx-proxy-manager的主界面了
默认用户:admin@example.com,密码:changeme。首次登录后,需要修改用户名、登录邮箱以及登录密码
修改完毕后,就可以在Users界面看到刚刚修改的信息
配置
接着打开路由器配置端口转发,把路由器的16080、16443分别转发到群晖(192.168.2.99)的16080、16443端口,协议选择tcp,adsl1、adsl2这些是爱快多播导致的,不用管它
现在打开DDNS客户端进行泛域名解析,如果域名为xxx.com,则配置为*.xxx.com,这样访问任意二级域名都会解析到路由器的公网IP地址(默认你知道如何配置DDNS客户端,如果没有配置DDNS,可以参考前面DDNS是什么这篇文章进行配置)
回到nginx-proxy-manager界面,点击SSL Certificates菜单下的Add SSL Certificate按钮,并在弹出窗中选择Let‘s Encrypt选项来申请泛域名证书
在Domain Names输入框中输入泛域名,例如*.xxx.com;DNS提供商选择阿里云,并在下面填入保存下来的AccessKey ID和AccessKey Secret(不知道如何申请,也可以参考DDNS是什么这篇文章)
勾选同意并保存后,需要多等一会
申请成功后,SSL Certificates列表下会多出一个泛域名证书
添加代理
最后就可以在Hosts选项下新增反向代理配置了
如果想要把memos服务配置为域名访问,需要在Domain Names中输入你想要访问的域名,例如memos.xxx.com,这里的二级域名可以任意配置。如果是http就在Schems中选择http。IP填入要转发服务器的IP地址(192.168.2.99是老宁群晖的地址,也可以选择其他内网的IP,比如路由器的地址)。端口填入将要转发的端口,比如memos的5230。下面的几个选项建议勾上
点击右侧SSL选项卡来配置证书,在SSL证书下拉框中选择最后一个带泛域名的选项
下面的选项也都建议勾上,最后点击保存
代理列表中的状态如果为Online,就代表配置成功了
最后来看看如何访问,直接通过memos.xxx.com是无法访问到内网的memos服务的,必须要通过转发的16080、16443端口才能访问对应的http和https服务。因为memos是加了SSL证书的,所以使用的是16443端口,最终访问memos的URL地址就是https://memos.xxx.com:16443
后面如果想要通过域名访问其他服务,只要在nginx-proxy-manager界面添加代理即可,比如https://openwrt.xxx.com:16443代理OpenWrt的服务;https://ha.xxx.com:16443代理192.168.2.99:8123的 Home Assistant 服务
后记
理解起来可能稍微有点乱,如果你不太懂,建议多看几次文章。要理解运营商是封了80、443端口,所以在Container Manager套件直接配置了16080、16443进行映射,这里可以选择群晖中没有被占用的任意端口,但是不能设置为80、443端口,因为群晖自己在80、443有服务在运行
在路由器上配置端口转发是为了让公网访问到群晖(内网)的设备,这样才能访问到群晖容器中的代理服务器。路由器和群晖的端口都是配置的16080、16443是为了方便理解和维护,如果在公网想要使用不同的端口进行访问,需要修改路由器的16080、16443端口,不能修改群晖的端口,因为在启动nginx-proxy-manager容器的时候就已经配置好了
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
值友9987436127
校验提示文案
一起吃饭叭
譬如:memos为192.168.50.1:8253对应memos.Domain.com:6666
emby为192.168.50.1:8096对应emby.Domain.com:6666
贰6666为容器开放的端口,是吧
校验提示文案
打不死的小强666
校验提示文案
风风风风风起
校验提示文案
mkk169
校验提示文案
光看不买咋了
校验提示文案
值友7025280426
校验提示文案
囧小叔
校验提示文案
设为主页
校验提示文案
值友4298692328
校验提示文案
这个风一样的人
校验提示文案
chenzhen2181
校验提示文案
solekg
校验提示文案
Windly520
校验提示文案
老男孩折腾记
校验提示文案
八个月的大猫
校验提示文案
昵称啊啊啊呀哈
校验提示文案
solekg
校验提示文案
chenzhen2181
校验提示文案
这个风一样的人
校验提示文案
昵称啊啊啊呀哈
校验提示文案
风风风风风起
校验提示文案
值友4298692328
校验提示文案
设为主页
校验提示文案
囧小叔
校验提示文案
值友7025280426
校验提示文案
Windly520
校验提示文案
光看不买咋了
校验提示文案
打不死的小强666
校验提示文案
mkk169
校验提示文案
八个月的大猫
校验提示文案
值友9987436127
校验提示文案
老男孩折腾记
校验提示文案
一起吃饭叭
譬如:memos为192.168.50.1:8253对应memos.Domain.com:6666
emby为192.168.50.1:8096对应emby.Domain.com:6666
贰6666为容器开放的端口,是吧
校验提示文案