NAS必备:使用Docker安装图形化反向代理服务器NginxProxyManger

玩NAS的朋友对反向代理多少都有所耳闻,一般来说NAS系统也会内置反向代理服务器,比如群晖、威联通等主流NAS,都是可以直接使用的。但是也有一些不足(不是所有NAS,勿喷),有的不能自动管理SSL证书,有的设置繁琐,总之用着不是那么舒服。今天笔者介绍的NginxProxyManger(NPM)就是一款解放双手的宝藏,用起来相当简单高效。

NginxProxyManger

NPM 底层实际就是Nginx,只不过基于Nginx开发了SSL证书、代理、用户等管理模块,支持直接在WebUI中管理你的网站。即使你完全不懂Nginx,也可以非常轻松的申请SSL证书、设置网站代理等等。核心的功能和特性主要有以下几点:

  • 安全而漂亮的Web管理界面
  • 可以轻松创建反代、重定向、流处理和404错误页面,而无需了解Nginx
  • 可以使用Let's Encrypt直接申请免费的SSL证书
  • 主机的访问列表和基本HTTP身份验证
  • 支持高级Nginx配置,有能力的可以玩的花
  • 用户管理、权限和审核日志

老规矩,笔者使用Docker来部署,无非是三板斧:准备、安装和配置,下面逐步介绍:

准备工作

  • 创建应用目录,例如在/share/Container下创建文件夹npm
  • 在homer文件夹下再创建dataletsencrypt文件夹
  • NAS上安装好docker-compose

安装NginxProxyManger

第一步、 在/share/Container/npm文件夹下创建文件docker-compose.yml

第二步、 并将下面内容复制粘贴到docker-compose.yml中,保存:

version: '3.8'
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: unless-stopped
    network_mode: bridge
    environment:
        - TZ=Asia/Shanghai
        - PUID=1000
        - PGID=100
        - HTTP_PROXY=http://192.168.31.20:7890
        - HTTPS_PROXY=http://192.168.31.20:7890
    ports:
      - '20080:80'
      - '20081:81'
      - '20443:443'
    volumes:
      - /share/Container/npm/data:/data
      - /share/Container/npm/letsencrypt:/etc/letsencrypt

参数说明

参数 说明
-p 80 HTTP协议的访问端口,这里笔者映射到宿主机的20080端口
-p 443 HTTPS协议的访问端口,这里笔者映射到宿主机的20443端口
-p 81 NPM管理界面的端口,这里笔者映射到宿主机的20081端口
-e PUID=1000 设置PUID的值,请改成自己的
-e PGID=100 设置PGID的值,请改成自己的
-e TZ=Asia/Shanghai 设置时区
HTTP_PROXY=http://192.168.31.20:7890 HTTP代理服务器,如果有的话建议设置,可以加快依赖安装速度
HTTPS_PROXY=http://192.168.31.20:7890 HTTPS代理服务器,如果有的话建议设置,可以加快依赖安装速度
-v /data 数据文件的保存位置,宿主机的位置可以修改成你自己喜欢的
-v /etc/letsencrypt SSL证书文件的保存位置,宿主机的位置可以修改成你自己喜欢的
image: 'jc21/nginx-proxy-manager:latest' 镜像名称,不支持中文。如果想用中文可以换另一个镜像:chishin/nginx-proxy-manager-zh

第三步、 在NAS的SSH中,切换到npm文件夹下,执行下面命令启动:

docker-compose up -d

第四步、 等待应用启动完成后,打开WebUI

在浏览器中输入NAS的IP+端口,例如:192.168.31.91:20081

NginxProxyManger
打开管理Web界面后,使用下面的默认帐号和密码就能登陆了:

Email:    [email protected]
Password: changeme

关于数据库

NPM支持SQLite和MySQL/MariaDB做数据库,默认是SQLite,如果你想改为MySQL/MariaDB的话,在上面部署命令的environment节点中增加以下配置即可:

 environment:
      DB_MYSQL_HOST: "db" #数据库地址
      DB_MYSQL_PORT: 3306  #数据库端口
      DB_MYSQL_USER: "npm"  #数据库用户
      DB_MYSQL_PASSWORD: "npm"  #数据库密码
      DB_MYSQL_NAME: "npm"  #数据库名称

不过,笔者建议直接用SQLite就好了,完全够用,不必自找烦恼。

配置NPM

登录以后,就可以开始进行正式的配置了,主要三件事:改邮箱&密码、申请SSL证书和添加网站代理。下面逐个进行说明。

1、修改邮箱和密码

首先,点击Users,可以看到刚才登录时的默认账号,点击右边三个点,在弹出的菜单中分别点击Edit DetailsChage Password来修改管理账号的邮箱和密码即可。
NginxProxyManger

其次,除了修改默认的账号,你还可以增加新的账号。点击Add User按钮,然后填写姓名、邮箱和角色。
NginxProxyManger

第三,在弹出的权限框中设置新用户的权限范围,按照自己实际情况选择即可。
NginxProxyManger

最后,设置完权限后,记得回到列表页,找到新创建的用户,点击三个点,选择Change Password,为这个新用户设置个密码,否则不能使用。
NginxProxyManger

2、申请SSL证书

与大多数免费SSL证书一样,NPM的SSL证书也是使用Let's Encrypt实现的,特点就是完全免费、期限比较短。但是,NPM支持泛域名SSL证书申请,最最重要的是可以自动续期,这可比各大云厂商的免费域名厚道多了。

首先,点击SSL Certificates打开证书管理页面,然后点击右上角Add SSL Certificates按钮,并在菜单中选择:
NginxProxyManger

接着,重点来了,这一步非常关键,详见下图:
NginxProxyManger

填写说明:

字段 说明
Domain Names 就是你要申请SSL证书的域名,建议填写泛域名,一步到位。比如你的域名是imissyou.com,你就填*. imissyou.com,填完后回车即可。
Email Address for Let's Encrypt 你的邮箱,建议填真实的,如果证书快到期了,Let's Encrypt会通过这个邮箱通知你,当然我们不需要它通知。
Use DNS Challenge 勾选。勾完以后才能选择你的域名解析服务商。
DNS Provider 域名解析服务商,就是你的域名是在哪解析的,笔者是在Cloudflare解析的,就选Cloudflare。
Credentials File Content 进行DNS Challenge需要用到的授权信息,每一个DNS Provider都不一样,比如Cloudflare就是需要API TOKEN,那么到Cloudflare上创建一个复制上去就行。其他的也类似。
Propagation Seconds 解析生效时间,可不填。

最后,勾选I Agree to the Let's Encrypt Terms of Service,再点击Save即可。

注意,这一步点击Save后有可能会报错,一般是下载python依赖失败导致的,可以进入容器中,手工安装相关的依赖即可。例如

# 进入容器
docker exec -it npm /bin/sh 

# 安装dnspod的依赖(如果你选择DNSPod作为DNS Provider
pip install certbot-dns-dnspod -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

# 安装cloudflare的依赖(如果你选择Cloudflare作为DNS Provider
pip install certbot-dns-cloudflare -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

3、添加反向代理

等第二步成功以后,下面就简单了,直接无脑操作就行。
首先,点击Hosts-->Proxy Hosts,打开代理设置页面:
NginxProxyManger

然后,点击Add Proxy Host按钮,弹出添加面板,一般只需要填写DetailsSSL两个页签下的内容即可。
NginxProxyManger

先填写Details中的内容
NginxProxyManger

Detail填写说明:

字段 说明
Domain Names 就是你要代理的网站的域名,比如你要代理NPM本身,就可以填写npm.imissyou.com,然后回车
Scheme 协议,一般填http
Forward Hostname / IP 代理对象的地址或ip,一般填内网代理对象的ip,比如代理NPM本身,就填NPM所在机器的IP
Forward Port 代理对象端口,一般填内网代理对象的端口,比如代理NPM本身,就填NPM的管理端口20081
Cache Assets 无脑勾选
Blocks Common Exploits 无脑勾选
Websockets Support 无脑勾选
Access List 默认的Publicly Accessible

切换到SSL页签继续填写:
NginxProxyManger

SSL填写说明:

字段 说明
SSL Certificate 选择你的SSL证书,就是第二步中申请的证书
Force SSL 是否强制SSL,建议开启
HTTP/2 Support 建议开启
HSTS Enabled 不建议开启
HSTS Subdomains 不建议开启

最后,全部填写完以后,点击Save按钮,一个反向代理的网站就添加好了。这时候就可以使用域名+NPM的HTTPS端口打开你的内部网站了。以后访问自己NAS上的各种服务或系统,就不用记一大堆端口号了,毕竟记域名相对更容易些吧!

总结

以上就是NginxProxyManger搭建的简单过程,当然由于每个人的机器环境、网络情况等等都不尽相同,可能在搭建过程中会遇到一些意外情况,搞不定的话可以在本文后面留言,笔者也会尽量帮大家解答。

原创不易,如果觉得此文对你有帮助,不妨点赞+收藏+关注,你的鼓励是我最大的动力!

高等精灵实验室

原创文章,作者:诺多,如若转载,请注明出处:https://www.huluohu.com/posts/437/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Windows中缩放屏幕和布局的常用方法
上一篇 2023年9月18日 08:41
Excel中的SUBIF函数作用与使用方法
下一篇 2023年9月18日 08:56

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注