iDickies
吞吐世界
iDickies

软路由探索之旅 篇五:玩转zdir3.0,以及依赖nginx-proxy-manager实现反向代理

前两天部署zdir3.0时候,遇到使用群晖反代无法处理public路径的问题,与作者沟通后,作者表示目前需要使用ng自行做反代,所以建议我在docker里部署一套ng来解决,刚好自己前阵子搭建好了npm还没来得及研究,于是便有了今天的教程。

下面我们就借搭建zdir3.0为例,顺便一起来研究下使用npm做反代的情况。顺便提一嘴,npm反代还挺好用的,相比较群晖反代而言,配置界面相对复杂,但灵活度及界面都好太多。再次吐槽群晖那无法拉大的反代配置界面。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-22-1024x360.png
nginx-proxy-manager

下面进入正题,首先我们需要部署npm。


一、docker部署npm

参考:xiaoxinpro/nginx-proxy-manager-zh: 基于nginx-proxy-manager翻译的中文版本

# 创建npm主目录
docker volume create npm

# 进入npm目录
cd [docker主目录]/npm

# 创建data和letsencrypt文件夹备用
mkdir data
mkdir letsencrypt

# 部署npm,这里选择chishin的中文版,可自行选择其他版本部署,大同小异
docker run --restart=always --name npm -d \
-p [https入口端口]:443 \
-p [http入口端口]:80 \
-p [管理后台端口]:81 \
-v [docker主目录]/npm/data:/data \
-v [docker主目录]/npm/letsencrypt:/etc/letsencrypt \
chishin/nginx-proxy-manager-zh:latest

# 注:443和80是外部访问npm端口,81是访问npm后台的端口

二、部署zdir3.0

参考:Zdir3.0 | 藏经阁,我这里使用docker部署,摘抄作者部分内容。

docker run -d --name="zdir" \
  -v /data/apps/zdir/data:/data/apps/zdir/data \
  -p 6080:6080 \
  --restart=always \
  helloz/zdir:3.0.0
  • 第一个/data/apps/zdir/data为本机挂载路径,可自行修改,第二个/data/apps/zdir/data固定,不要修改
  • 第一个6080为Zdir访问端口,可自行修改,第二个6080为容器端口,不要修改

三、npm配置

1、配置ssl证书,这里我们用cloudflare域名解析为例,首先进入npm后台-ssl证书,添加证书,选择Let’s Encrypt。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-8.png

2、输入必要的信息。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-9-631x1024.png

注意:邮箱需要是你的cloudflare邮箱,证书内容里要填写你的cf令牌,令牌获取路径详见下图,至于域名解析我就不做过多赘述,请自行百度学习。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-10.png
点击右上角“我的个人资料”
https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-11-1024x433.png
点击左侧“API令牌”,点击创建令牌
https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-12-1024x967.png
点击编辑区域DNS右侧的使用模板
https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-13-1024x936.png
修改区域资源为所有区域,其他默认,点击下方的继续显示摘要

注意:这里的选择不代表一定是这样,只是我这么设置是ok的,我并不是太理解这个区域资源是什么意思。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-14-1024x665.png
点击创建令牌,就会出现令牌,复制保存即可,只显示一次,以后看不到了

拿到令牌后,回填到前面的证书内容里。

3、回填好信息确认无误后,点击保存,等待1-2分钟后证书就会添加好了

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-15-1024x377.png

4、进入npm后台的主机-代理服务,点击添加代理服务,如图填好域名、主机ip、端口,可参考图上勾选。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-16-943x1024.png

点击SSL标签,选择刚才添加的ssl证书,并勾选强制ssl、支持http/2等。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-17.png

再点击高级,添加自定义配置

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-18-891x1024.png

代码如下,注意填好自己的zdir的ip和端口,这一步就是为了解决反代的public路径问题,详见作者帮助文档:Nginx反向代理 | 藏经阁

# 精确匹配首页,=优先级最高
location = / {
	proxy_pass http://[你的zdir内网ip]:[你的zdir内网端口];
	proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# 匹配Vue静态文件目录,和public公共文件夹目录
location ~* /(assets|public|api) {
	#如果是图片等静态文件,添加Expires头部
	if ( $uri ~* .*\.(gif|jpg|jpeg|png|bmp|webp|swf|flv|mp4|ts|ico|js|css|svg|ico)$ ) {
		expires 7d;
	}
	proxy_pass http://[你的zdir内网ip]:[你的zdir内网端口];
	proxy_set_header X-Real-IP $remote_addr;
   	proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
	
# 非/ 和非 /assets目录的时候进行重定向来去掉/public,/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到,优先级最低
location / {
	rewrite ^/(.*) /public/$1;
}

最后点击保存即可。因为太好用,我一下把群晖里的反代都配到这边了,哈哈。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-21-1024x858.png

四、路由器配置端口转发

还有最后一步,就是在路由器配置端口转发,记得给自己域名做好DDNS。

端口转发的要领是将npm的外部访问端口映射出去,就是下图这两个配置的端口,这样就可以根据这个外部端口来访问npm内的代理服务了

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-19-1024x477.png
一般映射443出去即可

到此,部署zdir3.0以及npm的教程就结束了,直接访问 https://zdir.xxxx.com:[https入口端口] 就可以啦。

https://dickies.myds.me:56789/wp-content/uploads/2022/10/image-20-1024x395.png
zdir3.0
赞赏
# # #
首页      科技      软路由      软路由探索之旅 篇五:玩转zdir3.0,以及依赖nginx-proxy-manager实现反向代理

老鬼迪克

文章作者

黑夜给了我黑色的眼睛,而我却用它,寻找光明。

发表回复

textsms
account_circle
email

iDickies

软路由探索之旅 篇五:玩转zdir3.0,以及依赖nginx-proxy-manager实现反向代理
前两天部署zdir3.0时候,遇到使用群晖反代无法处理public路径的问题,与作者沟通后,作者表示目前需要使用ng自行做反代,所以建议我在docker里部署一套ng来解决,刚好自己前阵子搭建好了n…
扫描二维码继续阅读
2022-10-25