反向代理服务器nginx-proxy-manager
一直以来,老苏都是使用群晖内置的反向代理,虽然很方便易用,但在某些情况下显得并不灵活。比如老苏打算安装 Authelia,需要修改 nginx 转发规则,必须通过 SSH 登录后找到相应的文件修改,这一点上不如 nginx-proxy-manager,当你习惯后,你会发现 npm 的优点远不止这点。
什么是 Nginx Proxy Manager ?
Nginx Proxy Manager是用于管理Nginx代理主机的Docker容器,具有简单、强大的界面。它使您可以轻松地转发到您在家里或其他地方运行的网站,包括免费的SSL,而无需对Nginx或Letsencrypt了解太多。
安装
数据库
通过 phpMyAdmin 在 MariaDB 10 中新建用户 npm,创建同名的库 npm 并授予所有权限。

老苏试过
MariaDB 5,写数据库有问题,表现为登录不成功,显示Bad Gateway错误

安装镜像
在群晖上以 Docker 方式安装。
在注册表中搜索 nginx-proxy-manager ,选择第一个 jc21/nginx-proxy-manager,版本选择 latest。

卷
在 docker 文件夹中,创建一个新文件夹,并将其命名为 npm,再建 2 个子目录,分别命名为 data 和 letsencrypt

| 文件夹 | 装载路径 | 说明 | 
|---|---|---|
| docker/npm/data | /data | 存放数据 | 
| docker/npm/letsencrypt | /etc/letsencrypt | 存放自动申请证书 | 

端口
端口不冲突就行,不确定的话可以用命令查一下
| 1 | # 查看端口占用 | 
| 本地端口 | 容器端口 | 
|---|---|
| 2443 | 443 | 
| 2080 | 80 | 
| 2081 | 81 | 

环境
| 可变 | 值 | 
|---|---|
| DB_MYSQL_HOST | 群晖主机 IP地址 | 
| DB_MYSQL_PORT | 默认为 3306 | 
| DB_MYSQL_USER | 根据前面的设置,数据库用户为 npm | 
| DB_MYSQL_PASSWORD | 数据库用户 npm的密码 | 
| DB_MYSQL_NAME | 根据前面的设置,库名为 npm | 

运行
在浏览器中输入 http://群晖IP:2081 就能看到主界面
默认的账号:
admin@example.com,密码:changeme

登录后可以编辑用户信息

之后是密码

frp
因为老苏的宽带没有公网 IP ,一直以来都是用 frp 做内网穿透,所以首先要对 frpc.ini 做相应的修改
local_ip是运行frpc的群晖的IP
local_port要根据前面设置的端口进行变更
custom_domains用了泛域名,没有像在『 frp基础设置示例详解 』一文中指向了具体的子域名,例如:nas.laosu.ml
| 1 | [http_xxxxxx] | 
证书
进入主菜单的 SSL Certificates 

Add SSL Certificate 有两种方式,一种是在线申请,另一种是添加已有证书

在线申请和我们在『 免费的泛域名https证书自动续期 』一文中介绍的非常类似,需要选择 DNS 解析服务提供商,以及填写 token 等参数

老苏因为已经配置了 Certbot 并实现了自动续期,所以只需要导入现有证书就可以了,Name 老苏用了域名,这样比较容易识别
- 私钥
Certificate Key对应privkey.pem- 证书
Certificate对应fullchain.pem- 中间证书
Intermediate Certificate对应chain.pem

上传成功后,证书存放在 /data/custom_ssl/ 目录中以 npm-1 、 npm-2 等子目录保存

反向代理
进入主菜单的 Hosts 

以将 http://192.168.0.197:5000 映射到 https://nas.laosu.ml 为例
- 因为是
Docker容器方式运行的,所以即便是本机也不要用localhost,一定要用IP- 默认
Cache Aeeets、Block Common Exploits、Websocket Support建议都勾上

选择 SSL 证书

因为准备用 https 协议访问,所以必须勾选 Force SSL

其他的 HTTP/2 和 HSTS 和群晖内置的是一样的,可根据需要勾选,没啥问题的话老苏建议都勾上

小结
为什么要另外安装 nginx proxy manager 而不是用群晖内置的反向代理的原因,老苏在一开始就讲了,装完之后老苏还发现了几个优点:
- 不用再依赖群晖,这使得老苏将来可以很方便的切换到其他平台
- 即便是 DSM6.1.7也不再有 『 HomeAssistant设置https访问后的问题 』一文中的情况,只要简单勾选Websockets support即可,而不需要各种修改
- 速度快,也许只是心理感觉
题外
最终 Authelia 并没安装成功,原因是不能在非标的端口上使用。
由于没有备案的缘故,https 协议不能使用 443 端口

假设你用了非标的 444, Authelia 会自动截掉端口(因为 443 是可以不用写的),从而导致资源加载失败👇
| 1 | Refused to load the image 'https://auth.laosu.ml/favicon.ico' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback. | 
已经在 Authelia 的 issues 提了,但是作者目前没有回复
参考文档
Nginx Proxy Manager
地址:https://nginxproxymanager.com/jc21/nginx-proxy-manager: Docker container for managing Nginx proxy hosts with a simple, powerful interface
地址:https://github.com/jc21/nginx-proxy-managerNGINX proxy manager
地址:https://www.blackvoid.club/nginx-proxy-manager/Running authelia on a non standard HTTPs port. Base href is not valid. · Issue #2765 · authelia/authelia
地址:https://github.com/authelia/authelia/issues/2765
