同域名内外网智能路由
问题
我在内网服务器上部署了一个 Alist 服务(通过 FnOS 的 Docker 环境部署),并通过内网穿透实现外网访问。该服务有一个域名(如 alist.example.com)解析到外网的 FRP 地址。我想实现这样的智能访问:当在内网时直接访问服务器,不经过 FRP;当在外网时则通过 FRP 访问。
解决方案
软路由通过DNS解析指向本地的Nginx服务,Nginx再将请求反向代理到对应的本地IP和端口。
- DNS服务:内网已安装iStoreOS软路由(其他openwrt软路由也行),其中默认包含
dnsmasq
- Nginx服务:部署在FnOS中,使用1Panel面板的
OpenResty
进行反向代理,其他反代软件也行 - Alist服务:部署在FnOS的Docker环境中
具体步骤
编辑dnsmasq配置
首先通过SSH连接到软路由,使用vim或nano编辑/etc/dnsmasq.conf
文件,添加如下配置:
配置格式为:address=/
后接域名alist.example.com
,最后是Nginx服务的内网IP地址(本例中为192.168.1.50
)
address=/alist.example.com/192.168.1.50
然后执行命令,重启dnsmasq
/etc/init.d/dnsmasq restart
在1Panel中添加反代
如果你使用其他反向代理软件,不一定要用1Panel,因为原理都是一样的。
由于1Panel安装在FnOS内,FnOS默认会将80和443端口重定向到FnOS的端口。
这时只需取消下方的勾选,然后在安装1Panel时直接使用80和443端口即可。
不过请注意,这样设置后直接输入FnOS的IP地址将无法访问,需要在地址后加上对应的端口号。
安装完1Panel之后,进入1Panel,然后点击**网站
-创建网站
**
填入相关信息即可。
DNS生效需要大约10分钟的时间。生效后,在内网访问域名时会直接通过本地反向代理访问服务,无需经过FRP。
此时你会发现内网访问默认使用HTTP协议,而外网部署通常默认使用HTTPS。为了解决这种访问协议不一致的问题,只需要在1Panel中配置相应的证书即可。
配置内网Https
首先进入1Panel,依次点击**网站
-证书
。如果之前已申请过证书,只需点击上传证书
**即可。我此前在NginxProxyManager
中申请了泛域名证书,因此直接下载使用即可。
保存填写内容后,进入网站列表,点击刚创建的网站,依次选择**配置
** -****HTTPS
。然后选择刚上传的证书并保存即可