群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

2024-01-17 09:41:08 38点赞 441收藏 72评论

前面在介绍群晖使用的时候,一直都在介绍群晖自带的代理工具,很多小伙伴在文章下留言,说试试Lucky这个反向代理工具,这个代理工具前面老宁也有过介绍,它集成了DDNS、端口转发、ACME自动证书等等功能,用起来也非常简单。但是它并不开源,老宁多多少少还是有一些顾虑,所以一直都是用的另一款反向代理工具: nginx-proxy-manager (https://github.com/NginxProxyManager/nginx-proxy-manager

方向代理

前面有文章简单的介绍了什么是反向代理,为了便于理解后面的概念,再来详细的介绍下这个概念

反向代理,是在服务器设立代理服务,接收来自客户端的请求后,将请求转发给内部网络中的服务器,并将服务器的响应结果返回给客户端

来详细探索一下,当平时通过域名访问网站时,背后究竟发生了什么

群晖搭建 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,个人最推荐的反代工具

在等待下载过程中,先创建好 nginx-proxy-manager 数据存放的目录。创建npm文件夹,并在该文件夹下分别创建data和letencrypt目录,分别存放nginx配置文件和ssl证书相关文件。这里的npm是nginx-proxy-manager的缩写,并不是Node.js的包管理工具,不要搞混了!

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

回到Container Manager套件,运行刚刚下载好的nginx-proxy-manager镜像。分别给443、80、81端口添加映射,因为一般家庭宽带的443、80都是被运营商封锁的,所以不能同样以443、80进行映射。81为nginx-proxy-manager管理页面使用的端口,443、80为https、http服务的端口

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

存储空间需要添加刚刚创建的data、letsencrypt文件夹,分别对应容器的/data、/etc/letsencrypt路径。data文件夹里存放的就是 nginx 的配置文件

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

其他设置不用更改,直接运行容器。现在用浏览器打开【群晖IP:16081】就能看到nginx-proxy-manager的主界面了

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

默认用户:admin@example.com,密码:changeme。首次登录后,需要修改用户名登录邮箱以及登录密码

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

修改完毕后,就可以在Users界面看到刚刚修改的信息

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

配置

接着打开路由器配置端口转发,把路由器的16080、16443分别转发到群晖(192.168.2.99)的16080、16443端口,协议选择tcp,adsl1、adsl2这些是爱快多播导致的,不用管它

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

现在打开DDNS客户端进行泛域名解析,如果域名为xxx.com,则配置为*.xxx.com,这样访问任意二级域名都会解析到路由器的公网IP地址(默认你知道如何配置DDNS客户端,如果没有配置DDNS,可以参考前面DDNS是什么这篇文章进行配置)

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

回到nginx-proxy-manager界面,点击SSL Certificates菜单下的Add SSL Certificate按钮,并在弹出窗中选择Let‘s Encrypt选项来申请泛域名证书

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

在Domain Names输入框中输入泛域名,例如*.xxx.com;DNS提供商选择阿里云,并在下面填入保存下来的AccessKey IDAccessKey Secret(不知道如何申请,也可以参考DDNS是什么这篇文章)

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

勾选同意并保存后,需要多等一会

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

申请成功后,SSL Certificates列表下会多出一个泛域名证书

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

添加代理

最后就可以在Hosts选项下新增反向代理配置了

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

如果想要把memos服务配置为域名访问,需要在Domain Names中输入你想要访问的域名,例如memos.xxx.com,这里的二级域名可以任意配置。如果是http就在Schems中选择http。IP填入要转发服务器的IP地址(192.168.2.99是老宁群晖的地址,也可以选择其他内网的IP,比如路由器的地址)。端口填入将要转发的端口,比如memos的5230。下面的几个选项建议勾上

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

点击右侧SSL选项卡来配置证书,在SSL证书下拉框中选择最后一个带泛域名的选项

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

下面的选项也都建议勾上,最后点击保存

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

代理列表中的状态如果为Online,就代表配置成功了

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

最后来看看如何访问,直接通过memos.xxx.com是无法访问到内网的memos服务的,必须要通过转发的16080、16443端口才能访问对应的http和https服务。因为memos是加了SSL证书的,所以使用的是16443端口,最终访问memos的URL地址就是https://memos.xxx.com:16443

群晖搭建 nginx-proxy-manager,个人最推荐的反代工具

后面如果想要通过域名访问其他服务,只要在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容器的时候就已经配置好了

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
72评论

  • 精彩
  • 最新
  • 我目前发现有如下问题:
    1.iPhone用浏览器登陆nas(非PC的桌面页面),回瞬间提示:“您的登陆已失效,请重新登陆”
    2.windows电脑登陆synology drive client,使用域名+6690登陆,会提示证书不安全。
    以上问题,如果把证书先导入群晖,再用群晖自己的反向代理,就一切正常。
    也正是因为用npm会出现各种奇奇怪怪的问题,所以每次都是装完以后,就删除了。
    楼主和伙伴儿们直到怎么解决吗?

    校验提示文案

    提交
    估计是证书的问题,你用npm直接申请证书就行了,群晖也会自己申请证书的

    校验提示文案

    提交
    我就是直接用nom申请的证书呀。 你用iPhone 登陆一下nas试一试,看看有没有我说的问题。

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 请教一下UP:
    我用的老毛子固件,群晖端口是15000,15001,在路由防火墙中放行了我的域名(ip6tables -A FORWARD -d nas.我的域名.cn -j ACCEPT).路由端口映射和nginx-proxy-manager的设置基本同步你的教程,你的是16080,16081,16443.我设置的是180,181,1443.路由器端口转发也是180 181 1443转发到本地群晖IP的180,181,1443.反代设置了群晖和路由网页端.碰到下面情况:
    1.外网直接 nas.我的域名.cn:15001可以访问群晖登录界面
    2.路由用 luyou.我的域名.cn 也能访问路由登录界面,
    3.但是反代设置的域名 nas.我的域名.cn:1443无法访问群晖,180也是如此.提示 :400 The plain HTTP request was sent to HTTPS port.

    校验提示文案

    提交
  • 弄了好几台,我自己的那台添加端口4443没问题,其余的添加都说使用了非法代码,怎么处理?报警如下:data/domain_names/1 must match pattern "^[^&| @!#%^();:/\\}{=+?,~`'"]+$"

    校验提示文案

    提交
    UP是不是按照你的办法申请的SSL证书已经不是泛域名证书了?

    校验提示文案

    提交
    收起所有回复
  • lucky比这个好用十倍

    校验提示文案

    提交
    功能集成比较多

    校验提示文案

    提交
    lucky是神马?

    校验提示文案

    提交
    还有9条回复
    收起所有回复
  • 我的理解是原本使用的是ip+不同对应的端口,通过反代后变成指定二级域名+固定端口。
    譬如:memos为192.168.50.1:8253对应memos.Domain.com:6666
    emby为192.168.50.1:8096对应emby.Domain.com:6666
    贰6666为容器开放的端口,是吧

    校验提示文案

    提交
    是的,容器本来是用的443、80,但是他们用不了,所以就改成别的端口,别的端口在URL上又不能省略,所以只能加上去了

    校验提示文案

    提交
    请教下,反代emby打不开,显示502 bad gateway怎么解决

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 家宽开不了80端口,没法验证ip的拥有权,没法申请ssl证书吧

    校验提示文案

    提交
    不是的,是用api的

    校验提示文案

    提交
    收起所有回复
  • 自从用了lucky后,我就没用npm了,lucky好用多了

    校验提示文案

    提交
    嗯,我个人比较注重开源

    校验提示文案

    提交
    lucky连本地文件都给加密了,谁知道里面有什么东西。

    校验提示文案

    提交
    收起所有回复
  • 问下有些教程我看到ddns-go里面用的不是泛域名,而是单单域名;然后在dns服务商里面另加CNAME解析;跟你这个孰优孰劣?或者说有什么区别吗

    校验提示文案

    提交
    单域名就一个个代理服务,这个就一次性搞定,后面想要啥就配置代理就行了,不用再去搞dns了

    校验提示文案

    提交
    谢了老哥,明白了。

    校验提示文案

    提交
    收起所有回复
  • 这个是不是老家有一台群晖没公网,添加到这里(有公网)转发后,就可以域名访问老家群晖了?

    校验提示文案

    提交
    不是的,还是需要公网IP才行

    校验提示文案

    提交
    收起所有回复
  • 为什么不直接用路由器的端口映射?

    校验提示文案

    提交
    简单的说端口转发就是端口映射

    校验提示文案

    提交
    对,意思就是说,为什么不直接用端口转发,设置不同的端口访问不同的服务?

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 群晖设置里不是有这个功能吗?为啥还要再装一个?

    校验提示文案

    提交
    群晖那个太麻烦了

    校验提示文案

    提交
    群晖那个麻烦

    校验提示文案

    提交
    收起所有回复
  • 我也是这样配置的,路由器op主路由有公网ipv4,用cloud flare 解析,但是不管是NGINX还是lucky,每次配置完都不成功,不是找不到主机,就是重定向次数过多错误😑。请教楼主到底哪里有玄机?

    校验提示文案

    提交
    cf你走了cdn么?

    校验提示文案

    提交
    收起所有回复
  • 试试 traefik 也很好用

    校验提示文案

    提交
    改天试试

    校验提示文案

    提交
    收起所有回复
  • 有能解决多个端口代理到同一个ip的方法不

    校验提示文案

    提交
    不太理解你的意思

    校验提示文案

    提交
    收起所有回复
  • 就想问下,没公网可以用不?

    校验提示文案

    提交
    可以的,内网穿透

    校验提示文案

    提交
    收起所有回复
  • 这个启动后,是不是群晖自带的反向代理服务器就不能使用了?我的好像就是这样

    校验提示文案

    提交
    一样可以用

    校验提示文案

    提交
    谢谢,那是不是群晖自带的ddns出问题了,域名连接不上去了,现在只能quick connect连接

    校验提示文案

    提交
    收起所有回复
  • Nginx 可以代理tcp和 udp吗?

    校验提示文案

    提交
    可以啊,不然这么多网站都用IP访问?

    校验提示文案

    提交
    收起所有回复
  • lucky简单易用,我觉的比这个好

    校验提示文案

    提交
    老师,可以教我用Lucky吗

    校验提示文案

    提交
    我文章有写

    校验提示文案

    提交
    收起所有回复
  • 用了三年了,一直很稳。。

    校验提示文案

    提交
    有什么用?自建梯子吗?

    校验提示文案

    提交
    哥们,你是在群晖上用的npm吗?难道一丁点儿奇怪的问题都没有吗?我现在遇到iphone手机登陆nas,会直接告诉我“您的登陆已失效,请重新登陆”,一直无法登陆。还有就是windows用drive时,登陆会告诉我证书不安全。哦,对了,我用npm申请的是泛域名证书。

    校验提示文案

    提交
    收起所有回复
  • 一直没弄懂反代怎么用。mark了

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
441
扫一下,分享更方便,购买更轻松