玩NAS的朋友对反向代理多少都有所耳闻,一般来说NAS系统也会内置反向代理服务器,比如群晖、威联通等主流NAS,都是可以直接使用的。但是也有一些不足(不是所有NAS,勿喷),有的不能自动管理SSL证书,有的设置繁琐,总之用着不是那么舒服。今天笔者介绍的NginxProxyManger(NPM)就是一款解放双手的宝藏,用起来相当简单高效。
NPM 底层实际就是Nginx,只不过基于Nginx开发了SSL证书、代理、用户等管理模块,支持直接在WebUI中管理你的网站。即使你完全不懂Nginx,也可以非常轻松的申请SSL证书、设置网站代理等等。核心的功能和特性主要有以下几点:
安全而漂亮的Web管理界面
可以轻松创建反代、重定向、流处理和404错误页面,而无需了解Nginx
可以使用Let's Encrypt直接申请免费的SSL证书
主机的访问列表和基本HTTP身份验证
支持高级Nginx配置,有能力的可以玩的花
用户管理、权限和审核日志
老规矩,笔者使用Docker来部署,无非是三板斧:准备、安装和配置,下面逐步介绍:
准备工作
创建应用目录,例如在/share/Container下创建文件夹npm
在homer文件夹下再创建data和letsencrypt文件夹
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
Email: admin@example.comPassword: 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 Details和Chage Password来修改管理账号的邮箱和密码即可。
其次,除了修改默认的账号,你还可以增加新的账号。点击Add User按钮,然后填写姓名、邮箱和角色。
第三,在弹出的权限框中设置新用户的权限范围,按照自己实际情况选择即可。
最后,设置完权限后,记得回到列表页,找到新创建的用户,点击三个点,选择Change Password,为这个新用户设置个密码,否则不能使用。
2、申请SSL证书
与大多数免费SSL证书一样,NPM的SSL证书也是使用Let's Encrypt实现的,特点就是完全免费、期限比较短。但是,NPM支持泛域名SSL证书申请,最最重要的是可以自动续期,这可比各大云厂商的免费域名厚道多了。
首先,点击SSL Certificates打开证书管理页面,然后点击右上角Add SSL Certificates按钮,并在菜单中选择:
接着,重点来了,这一步非常关键,详见下图:
填写说明:
字段 | 说明 |
---|---|
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 Providerpip install certbot-dns-dnspod -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/# 安装cloudflare的依赖(如果你选择Cloudflare作为DNS Providerpip install certbot-dns-cloudflare -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
3、添加反向代理
等第二步成功以后,下面就简单了,直接无脑操作就行。首先,点击Hosts-->Proxy Hosts,打开代理设置页面:
然后,点击Add Proxy Host按钮,弹出添加面板,一般只需要填写Details和SSL两个页签下的内容即可。
先填写Details中的内容
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页签继续填写:
SSL填写说明:
字段 | 说明 |
---|---|
SSL Certificate | 选择你的SSL证书,就是第二步中申请的证书 |
Force SSL | 是否强制SSL,建议开启 |
HTTP/2 Support | 建议开启 |
HSTS Enabled | 不建议开启 |
HSTS Subdomains | 不建议开启 |
最后,全部填写完以后,点击Save按钮,一个反向代理的网站就添加好了。这时候就可以使用域名+NPM的HTTPS端口打开你的内部网站了。以后访问自己NAS上的各种服务或系统,就不用记一大堆端口号了,毕竟记域名相对更容易些吧!
总结
除了以上主要配置外,reader还支持其他的一些功能,例如清理失效书源、书签管理、书架管理等等。如果你想将reader作为主力阅读器,还是得亲自上手试试才知道,笔者抛转引起,其他大佬们完善指正。
原创不易,如果您觉得此文还不错,不妨点赞+收藏+关注,你的鼓励是我最大的动力!