使用 NGINX 通过删除域名路由到本地资源

使用 NGINX 通过删除域名路由到本地资源

设置:

我的家庭网络上有各种设备。我使用“.home”作为此网络的域名。我的路由器(华硕 - 带 Merlin 固件)支持基本 DNS,可以将“desktop.home”路由到网络内的相应设备。我有一个域名“reallyreallyreallycoolname.com”,它有一个指向我家庭网络的子域名(*.home.reallyreallyreallycoolname.com)。

问题:

我希望 NGINX 从请求中删除域名,并根据路由器的 DNS 表将请求发送到适当的目的地。因此,对 desk.home.reallyreallyreallycoolname.com 的请求将通过反向代理发送到 192.168.1.81(或分配给“desktop.home”的任何 IP)。

尝试的解决方案:

我认为对于“服务器名称”,可能有一个捕获组,并且 proxy_pass 会重新声明它。例如:

server_name {*}.home.reallyreallyreallycoolname.com; location\{ proxy_pass http://{\1}.home }

答案1

我有点明白了。服务器名称可以包含使用以下方法捕获的变量Pearl 兼容正则表达式如所述这里。我的示例代码是:

...
server_name ~^(?<hostName1>.+)\.home\.reallyreallyreallycoolname\.com$;
location/{
   proxy_pass http://$hostName1.home;
}
...

但是,尽管变量名捕获正确,并且 nginx 正确解释“http://$hostName1.home”,但解析失败。我猜 NGINX 在启动时执行 DNS 解析,而不是在运行时。

更新

下列的每次执行 proxy_pass 时,如何强制 nginx 解析 DNS(动态主机名)?,事实证明您必须为服务器指定一个 DNS 解析器,以便它知道如何解析该调用。

相关内容