我使用的unraid系统使用ddns(DDNSGO)绑定域名(阿里域名)与主机的ipv6地址进行远程访问,unraid是6.12.8。
遇到的问题是,配置当时是没问题的,但是过几天就会失效,无法通过域名访问webui了。这种情况在之前使用威联通的NAS的时候没有遇到过。但是docker里面的应用还是正常的,通过这个现象基本锁定是nginx的问题了。
通过看nginx的配置文件(/etc/nginx/conf.d/servers.conf),这个配置文件是unraid自动生产的,会直接把当前的ipv6地址写到配置里面:
自动生产的nginx配置文件
只有匹配了地址才能正常访问,但是一旦IPV6地址变更了,系统又不会自动更新,就不能通过webui访问了。而且在使用的过程中,发现一旦IPV6地址变更,系统自带的SMB共享功能也不能通过IPV6进行访问了。
解决这个问题的方法有好几个:
1、安装zerotier,映射到内网,通过内网IP地址访问,同时在unraid里面添加对应的虚拟网卡:
在uraid的网络配置里面加入zerotier的虚拟网卡
系统会自动把这个网段加入到nginx的配置里面。由于zerotier的地址是内网地址,而且不会变更,所以这个问题可以一定程度的解决这个问题,但是要求访问的设备也装zerotier,这个不方便。
2、周期性重启nginx和smb服务
定期执行/etc/rc.d/rc.nginx -restart 可以重新生产nginx配置文件,并应用。
同理,定期执行/etc/rc.d/rc.samba -restart 也可以恢复samba的访问。
但问题是,重启周期是多少?太短,如一分钟,那么webui和samba每分钟都会断开;太长,则IPV6地址变更到重启的间隔之内,都不能访问到,问题没有很好的解决。
3、通过优化nginx配置,并监测nginx文件是否变化,在变化后更新配置。这种是我目前正在使用的方式,优点是灵活,空窗期比较短,缺点是你得自己写代码。
首先优化nginx的配置。不要使用IPV6绑定访问,而是使用域名绑定访问:
注意这个修改在全文有两三个地方,都要改好了。
然后把conf文件存在/boot/下面,这个文件夹是在启动盘里面的,不会随着重启而消失。
后面就简单了,写个python,监控/etc/nginx/conf.d/servers.conf 是否和改好的 conf 一致,若不一致,复制一份覆盖过去,并重启nginx和samba:
#nginx的维护程序
def mtNginx():logger.info('执行nginx维护')global nginxNeedReload#检查nginx的配置缓存文件是否存在.if not(os.path.exists(NGINX_CONF_CACHE)):logger.warning('nginx配置缓存不存在,复制缓存到制定位置.')os.system(f'cp {NGINX_CONF_SOURCE} {NGINX_CONF_CACHE}') #检查nginx的配置文件是否需要更新if os.path.getsize(NGINX_CONF_CACHE) != os.path.getsize(NGINX_CONF):logger.warning('nginx配置文件异常,执行更新.')os.system(f'cp {NGINX_CONF_CACHE} {NGINX_CONF}') #重启samba服务os.system(f'/etc/rc.d/rc.samba -restart') nginxNeedReload = True#检查nginx配置是否需要更新if nginxNeedReload:res = os.popen('nginx -s reload').read()if res == '':logger.warning('enginx配置更新成功.')nginxNeedReload = Falseelse:logger.warning('enginx配置更新失败.')
上面的代码块里面先复制了一份文件到内存中,避免对启动盘的重复访问。然后检测配置文件是否被更改,如果更改(网络变更的时候,有时候会触发nginx配置文件的自动变更),那就重新覆盖一份,并重启smaba。并让nginx重新使用新的应用新的配置文件。注意此处不能使用rc.nginx -restart 的方式重启nginx,因为这样conf文件就会重新生成,达不到想要的效果。
上述代码可以使用定时任务的形式周期执行(例如一分钟一次),当conf文件异常才会触发服务的重置。
也可以使用nobup在后台托管的形式(我使用这种方式,因为这个脚本还带读取硬盘温度,调整主机风扇转速的功能)。
需要在GO文件里面配置开机运行。
感觉unraid的最大卖点就是硬盘的利用率,但是它的使用习惯,以及自己DIY的难度,比OMV那些难不少,主要是安装的包啥的重启后全部没了,这点太不方便了,希望官方能改改吧。