反向代理服务器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
并授予所有权限。

反向代理服务器nginx-proxy-manager插图

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

反向代理服务器nginx-proxy-manager插图1

安装镜像

在群晖上以 Docker 方式安装。

在注册表中搜索 nginx-proxy-manager
,选择第一个 jc21/nginx-proxy-manager
,版本选择 latest

反向代理服务器nginx-proxy-manager插图2


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

反向代理服务器nginx-proxy-manager插图3
文件夹 装载路径 说明
docker/npm/data /data 存放数据
docker/npm/letsencrypt /etc/letsencrypt 存放自动申请证书

反向代理服务器nginx-proxy-manager插图4

端口

端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号

本地端口 容器端口
2443 443
2080 80
2081 81

反向代理服务器nginx-proxy-manager插图5

环境

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

反向代理服务器nginx-proxy-manager插图6

运行

在浏览器中输入 http://群晖IP:2081
就能看到主界面

默认的账号:admin@example.com
,密码:changeme

反向代理服务器nginx-proxy-manager插图7

登录后可以编辑用户信息

反向代理服务器nginx-proxy-manager插图8

之后是密码

反向代理服务器nginx-proxy-manager插图9

frp

因为老苏的宽带没有公网 IP
,一直以来都是用 frp
做内网穿透,所以首先要对 frpc.ini
做相应的修改

  • local_ip
    是运行 frpc
    的群晖的 IP
  • local_port
    要根据前面设置的端口进行变更
  • custom_domains
    用了泛域名,没有像在『 frp基础设置示例详解  』一文中指向了具体的子域名,例如:nas.laosu.ml
[http_xxxxxx]
type = http
local_ip = 192.168.0.199
local_port = 2080
custom_domains = *.laosu.ml

[https_xxxxxx]
type = https
local_ip = 192.168.0.199
local_port = 2443
custom_domains = *.laosu.ml

证书

进入主菜单的 SSL Certificates

反向代理服务器nginx-proxy-manager插图10

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

反向代理服务器nginx-proxy-manager插图11

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

反向代理服务器nginx-proxy-manager插图12

老苏因为已经配置了 Certbot
并实现了自动续期,所以只需要导入现有证书就可以了,Name
老苏用了域名,这样比较容易识别

  • 私钥 Certificate Key
    对应 privkey.pem
  • 证书 Certificate
    对应 fullchain.pem
  • 中间证书 Intermediate Certificate
    对应 chain.pem

反向代理服务器nginx-proxy-manager插图13

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

反向代理服务器nginx-proxy-manager插图14

反向代理

进入主菜单的 Hosts

反向代理服务器nginx-proxy-manager插图15

以将 http://192.168.0.197:5000
映射到 https://nas.laosu.ml
为例

  • 因为是 Docker
    容器方式运行的,所以即便是本机也不要用 localhost
    ,一定要用 IP
  • 默认 Cache Aeeets
    Block Common Exploits
    Websocket Support
    建议都勾上

反向代理服务器nginx-proxy-manager插图16

选择 SSL
证书

反向代理服务器nginx-proxy-manager插图17

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

反向代理服务器nginx-proxy-manager插图18

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

反向代理服务器nginx-proxy-manager插图19

小结

为什么要另外安装 nginx proxy manager
而不是用群晖内置的反向代理的原因,老苏在一开始就讲了,装完之后老苏还发现了几个优点:

  1. 不用再依赖群晖,这使得老苏将来可以很方便的切换到其他平台
  2. 即便是 DSM6.1.7
    也不再有 『 HomeAssistant设置https访问后的问题 』一文中的情况,只要简单勾选 Websockets support
    即可,而不需要各种修改
  3. 速度快,也许只是心理感觉

题外

最终 Authelia
并没安装成功,原因是不能在非标的端口上使用。

由于没有备案的缘故,https
协议不能使用 443
端口

反向代理服务器nginx-proxy-manager插图20

假设你用了非标的 444
Authelia
会自动截掉端口(因为 443
是可以不用写的),从而导致资源加载失败👇

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-manager

NGINX 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

原文链接:https://www.modb.pro/db/375847

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享