在unraid里装Nginx Proxy Manager实现内部Web服务SSL加密
nginx使用多年,本来想手动的,年纪大了越傻瓜化越好,试验了用Nginx Proxy Manager(下面简称NPM)反向代理实现家里内部的web HTTP服务全部SSL化,主打一个安全(HTTPS)、简单(有界面)、方便(不用记和映射那么多端口了)。记录一下几个核心过程:
DDNS
申请的是aliyun的域名,aliyun支持*通配符域名解析和API更新记录(后台申请Access Key ID、Access Key Secret,记下来,后面两个地方要用),这里的技巧是把*.x.x.x通配CNAME解析到x.x.x上,然后ikuai里高级应用 > 动态域名,填入动态更新x.x.x域名的相关信息,这样拨号ip一变就自动更新DNS了;通过*.x.x.x可以在NPM里匹配不同的Web服务

安装NPM
在unraid的Apps里搜"Nginx-Proxy-Manager-Official",安装即可。NPM是个docker应用,需要用到80、443、81端口(81是内部管理端口),网络只能选择自定义的br0。在unraid里面部署NPM也踩到一点坑,一并记录一下:
坑一:unraid使用旁路由作为网关的情况下,用默认的bridge模式外部无法访问应用
解决办法1:用host模式,即侵入了unraid的端口,不是很推荐,但方便;但对于NPM这种用80、81、443口的服务不适用
解决办法2:用macvlan自定义网络模式,即相当于给应用配置unraid同网段ip。这里有坑的是我的局域网也是172.17开头的,这和docker默认bridge的网段重合,所以没法用docker network create,都得在unraid的界面里配,我给ip段(DHCP池)配了172.17.x.192/26;另外得把Host access to custom networks打开,不然访问不到
坑二:unraid用DHCP获取的DNS,docker实例里面很大可能没有办法正确解析域名
解决办法:unraid配置主网络那里,dns选static,写死
SSL证书
NPM里内置了Let's Encrypt的免费SSL域名证书(对*.x.x.x通配域名进行申请),通过DNS验证可以申请(在箭头所指的地方填入前面aliyun的Access Key ID、Access Key Secret)。证书90天有效,到期前应该会自动更新。

配置反向代理
最后,就可以在NPM的Hosts里面添加配置反向代理,Domain Names填入域名x.x.x.x(因为我们之前用的通配符申请的域名证书,可以通过这个区分访问不同的web服务),Forward Hostname和Port填入内网web的对应信息,箭头所指的SSL里面选择刚才的域名证书*.x.x.x

配置端口映射
家用宽带被运营商禁封了80和443端口,只能在ikuai里配置其他端口映射到NPM这个应用的443,比如4444。最终,可通过 https://x.x.x.x:4444/ 访问内部Web服务,即通过NPM实现了SSL加密和对外访问,不需要记住每个服务的ip和端口,记住子域名即可。
默认首页
NPM其实还可以设置默认首页(Setting > Default Site),把他设置成所有内部Web服务的访问链接。即选择“Custom Page”,页面内容就一个简单的跳转列表:

这样只需要访问首页一个地址即可,连子域名都不用记了。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

roryp
校验提示文案
FH113
校验提示文案
八集大狂疯
这个问题困扰了我好久了
解决办法一,有的容器支持改host 放弃
解决办法二,划网段,单网口可以实现吗?
校验提示文案
值友6481443746
校验提示文案
八集大狂疯
校验提示文案
八集大狂疯
校验提示文案
八集大狂疯
这个问题困扰了我好久了
解决办法一,有的容器支持改host 放弃
解决办法二,划网段,单网口可以实现吗?
校验提示文案
FH113
校验提示文案
值友6481443746
校验提示文案
roryp
校验提示文案