背景:

家里之前有个QNAP 的NAS,2022年过年时候QNAP发布了漏洞声明,建议纯域名访问NAS规避漏洞,这算是个契机,外加自己爱折腾,就将之前采用的、在路由器上使用不同端口映射各类服务,改为nginx反代——统一访问端口,但通过不同子域名访问。这避免了IP直接访问NAS的问题。做这个反代,还有个想法是把bitwarden在docker中也做起来,之前测试部署这个好像也需要反代。

搭建前提:

  1. 动态公网IP:电信宽带可以申请ip v4的动态公网IP,打10000号申请,移动和联通是不行的;

  2. DDNS(动态域名解析):我从阿里万网上买的tech后缀的便宜域名,199买了10年的,配合软路由上aliDDNS解析,或者部署aliddns的docker都可以实现动态域名解析。

  3. docker环境:群辉 NAS,QNAP NAS,或者linux系统,ikuai/openwrt软路由系统等,都可以安装docker环境。推荐 NAS或者软路由上安装docker,图形化界面方便部署和管理镜像;

安装步骤:

  • 部署完毕后,访问管理端口默认部署的话 8181是管理端口,路由器上将外网映射到这个docker的4443端口,外网均采用https前缀访问

端口映射

证书申请1

证书申请2

  • 这里有个小bug,申请界面会一直转圈转几分钟到超时,实际已经申请成功了,F5刷新下界面,就可以考到类似上图“证书申请1”中的泛域名证书了,这个证书给后面所有的子域名配置。docker作者的文档提到证书在到期一个月前会自动续期,到时继续观察下这个流程是否丝滑。。

  • 基础准备完后,就开始配置子域名的解析,在阿里云(或你的域名商)域名管理界面,将所有子域名都配置CNAME到根域名,例如http://book.abc.com就CNAME到http://abc.com

  • 然后在nginx界面配置所需的子域名反代,就OK了

参考和其他说明:

  1. 除了阿里云买域名实现DDNS,腾讯云DNSPod买域名也可以实现,只是我习惯了阿里云的DDNS,腾讯云详见 使用docker搭建nginx proxy manager实现反向代理和SSL证书申请 - 哔哩哔哩 (bilibili.com)

  2. B站有Up主介绍nginx-proxy=manager这个应用,有兴趣可以听听前面的功能介绍,后面的要买VPS什么的没必要,是另外个套路了,另外不建议在阿里云或腾讯云之外买域名,没有现成的插件或者docker,DDNS估计都会很头疼。【Docker系列】一个反向代理神器——Nginx Proxy Manager_哔哩哔哩_bilibili

  3. 这个应用图形化管理很方便,有个小坑建议填填,无需ssh工具,docker命令行界面进去修改proxy.conf文件即可,详见:nginx-proxy-manager填坑