译者:UC新闻报道愤慨部
序言
前段时间总算将qnap预览到5.0了,对我而言最管用的两个机能众所周知是减少了控制系统便携式的逆向全权机能
以后是采用docker相互配合nginx来与此同时实现,前段时间他们的搜索引擎即将到期了,支付费用觉得好贵
只好转用qnap便携式的ddns,采用com搜索引擎还能手动续牌letsencrypt的合格证书
对我而言早已足够多了,现阶段也没更多地市场需求,只好就预备转为采用便携式的逆向全权
采用操作过程中碰到了许多坑,在此和我们探讨下
介绍下逆向全权
qnap的逆向全权采用出来十分简单,边线如图
qnap 逆向全权边线
间接加进准则方可
如图就能将出访邻近地区的10010路由器全权到10086路由器,协定包装袋为https
这对这类强制性须要https的应用领域而言十分管用,比如说bitwarden、joplin
你只须要在这两处加进合格证书,因此qnap会手动续牌合格证书
与此同时你能采用许多出访控制命令行,来选定什么样ip能出访,有很大的可靠性
简单采用的话其实就已经能了,易用性也还不错,跟群晖的基本一致
但如果要有更进一步的配置就有点麻烦了 ,比如说下面要说的joplin
碰到问题
这里先推荐下joplin,一个基于md的开源的笔记软件,还是比较好用的(就是有点丑 )
以后采用joplin都是搭配webdav采用,但webdav效率确实不怎么高,坚果云还有一堆限制
因此看网上说法还容易出现同步的bug?
前段时间去官网溜达发现joplin server早已出到2.x beta了,觉得应该没啥大的问题的,就琢磨着转为joplin server
按照官方的说法,比nextcloud和webdav更快速和高效
官方的速度比较
简单如是说一下基于docker的joplin server构筑
官方的如是说采用了env文件,但是在qnap上采用比较不方便,实际上env文件里只是配置了docker的许多环境参数而已,所以我还是决定间接创建(qnap也能采用yaml),
根据官方建议,采用PostgresSQL 数据库存储(图简单能采用sqlite,但我找了很久没找到db文件存储边线。。。不好备份,所以放弃了 ,因此数据量大了后PostgresSQL 更有优势)
qnap采用container station ,先拉取 postgres 官方镜像,注意从dockerhub拉取,qnap推荐版本低了点
拉取后创建
环境注意后面三个,分别是数据库名、密码、用户名,这三个后续会采用,
网络方面自行映射5432路由器,
持久化方面自行映射邻近地区文件夹至 /var/lib/postgresql/data
至此postgres创建完成,后续数据备份只须要备份数据库文件夹,我这边采用hybrid backup sync实时同步备份至ondriver,且定时冷备份到异地,数据还是比较有保障的
然后创建joplin server,采用 joplin/server 官方镜像,创建容器时注意配置环境
APP_BASE_URL :后续出访joplin server采用的搜索引擎,须要https,须要完全一致
APP_PORT: 路由器,默认23000
DB_CLIENT:pg 采用postgres数据库
POSTGRES_DATABASE:postgres数据库,同以后创建的数据库名
POSTGRES_HOST:数据库ip,同一机器采用本机ip方可
POSTGRES_PASSWORD:数据库密码,同以后设置
POSTGRES_PORT:数据库路由器,同以后设置,默认5432
POSTGRES_USER:数据库用户名,同以后设置
路由器映射22300,建议不改,若修改则逆向全权处响应修改
之后启动方可,注意先启动数据库,然后启动joplin,否则joplin可能会报错
启动成功后能采用邻近地区出访ip:22300,出现下面可认为已启动
这里就出现了一个坑,以后无论怎么改都是这个invalid origin error
看报错能大概知道是joplin会校验Origin,与APP_BASE_URL 不一致就会出现这个问题
官方解释也是如此
至于解决方法须要用到逆向全权,因此方向全权须要许多配置传递原origin
实际上官方也给出了答案
nginx加进 proxy_set_header host $host;
apache加进 ProxyPreserveHost on
以后我是采用nginx转发的,贴一个我以后采用的ngixn配置
主要是将https 22301路由器全权到22300路由器
最终的出访路径为 https://xxx.myqnapcloud.com:22301,
这个路径必须与APP_BASE_URL 里填写完全一致!!!包括路由器 (别问我为什么知道,试了好久)
至此就能出访了, 采用默认的账户名 admin@localhost 和密码 admin 登录,然后修改账号和密码方可
登录进去就能看到许多统计,如图
客户端方面配置为joplin server方可
至此就能正常采用了
转为qnap便携式逆向全权碰到的问题
现在预备把ngxin转为qnap便携式的全权
然后问题来了,配置22301到22300的逆向全权后,报invalid origin error错误。。。。
解决方法倒是有,可是在qnap上怎么配置?
首先得确定qnap采用的什么来逆向全权
经过一番查找(ps),能知道采用的是apache来做的
位于/usr/local/apache/bin/apache
apache 的话须要加进 ProxyPreserveHost on 配置
然而在页面上查看了下根本没更详细的配置。。。
页面上倒是有高级配置
可是只能配置超时和自定义标头等信息
这下就麻烦了。。。离成功只差一步啊
后来想了下能不能他们去编辑实际的apache 配置,当时觉得他们很机智
只好掉入了一个坑中
qnap的逆向全权采用得比较少,网上资料太少了
不过经过几天的努力,还是基本弄清了流程,这里分享给我们
首先确定了是apache,就顺着apache去找配置,发现配置在/etc/config/apache/下
extra 内基本就是便携式的许多映射配置
一番查找并没找到我们自定义的配置
挨着查看了几天。。。眼睛都看花了也没找到。。。
都预备放弃了时偶然发现在修改qnap的方向全权时会调用/etc/init.d/reverse_proxy.sh这个脚本
总算看到点希望了,赶紧去看下这个脚本,内容折叠了下
总算看到了熟悉的身影
这里大概给我们理一下流程
当用户在页面上配置了逆向全权准则后,qnap会将用户的准则保存到/etc/config/reverseproxy/reverseproxy.json 中
这是一个json格式的文件,内容如图
是不是很熟悉,就是将页面上的配置以json格式保存了下来
随后采用/etc/init.d/reverse_proxy.sh 这个脚本来解析json,
这些配置被解析生成为apche 配置,存放于/etc/reverseproxy/extra/下
根据配置会有多个,命名方式为1.conf 2.conf …
我们去看下这些配置
啊。。。。熟悉的apache配置 ,总算看到你了,因此路由器也是我自定义的路由器
然后会调用
/usr/sbin/reverseproxy -k start -f/etc/reverseproxy/reverseproxy.conf 来启动用户自定义规则
/usr/sbin/reverseproxy 是快捷方式,实际指向/usr/local/apache/bin/apache
我们看下reverseproxy.conf最后一行
包含了/etc/reverseproxy/extra/下所有conf文件
至此就将我们的准则运行出来了
现在知道了流程,就须要考虑怎么来与此同时实现我们的市场需求了
我现在的市场需求是加进 ProxyPreserveHost On 这个配置
方法有两个,
一是修改reverse_proxy.sh这个脚本,在生成配置时就注入,不过这个须要改脚本,且页面上没相应的配置界面,pass
二是间接修改生成好的配置,这个就十分简单了
去/etc/reverseproxy/extra/ 下看下,找到我们需啊哟修改的配置,加进方可,如图
这样就将配置加入进去了
下面是如何让他生效呢?
经过测试,在页面关闭、启动这个条准则会删除原有准则并重新生成
这就又绕回去了 。。。
经过查看sh脚本,发现是在start_proxy 时会删除原有配置,然后根据json解析生成新配置
我不想修改脚本,所以只能绕过,
经过查找,发现在reload_proxy这个方法不会触发删除,只会调用
/usr/sbin/reverseproxy -k graceful -f/etc/reverseproxy/reverseproxy.conf
重新加载配置
所以我们能这样,在页面加进必要的参数后保存、启动
然后ssh到设备,加进修改我们须要的参数,执行
sudo /etc/init.d/reverse_proxy.sh reload
这样配置就加载成功了,测试采用正常
总结
现阶段测试了下手动修改配置,在页面添加或删除准则不会触发删除原有准则
启动或停止会触发
nas重启也会触发
想要更完美得去改脚本了,不过我nas基本不关机重启,逆向全权配置好后基本也不会去动它
所以现阶段就算是完成了,相互配合qnap他们的ddns和手动预览合格证书还是比较香的