重定向到内部本地 ip 和端口而不使用 /etc/hosts (nginx)

Redirect to internal local ip and port without using /etc/hosts (nginx)

我有一个 diy(穷人的)NAS,我可以使用 ip 访问家庭网络中的文件浏览器:192.168.0.2:1111

我可以修改每个设备中的 /etc/hosts 以将 my-fancy-filebrowser-url.com 重定向到 192.168.0.2:1111

但是,我想找到一种替代方案,它不涉及修改网络中每个设备的 /etc/hosts。我不想设置本地 dns 服务器,因为它可能会减慢互联网域的解析速度,我正在使用 8.8.8.81.1.1.1 来更快地解析域名。

我发现的替代方法之一是使用 nginx。我已经购买了一个域名,我们称之为 mydomain.com 并且我有一个 ipv6 VPS 服务器。我已经使用 cloudflare 将 url 重定向到我的服务器 ipv6 地址并且我已经将 nginx 安装到我的 VPS 和我创建了这个配置文件:

http {
    # redirect to my router page
    server {
        listen      [d6b6:8760:97ec:ea7a:562c:c954:bb8d:6e41]:80;
        return 302  http://192.168.0.1;
    }
    # redirect to filebrowser
    server {
        listen      [d6b6:8760:97ec:ea7a:562c:c954:bb8d:6e42]:80;
        return 302  http://192.168.0.2:1111;
    }
}

重定向到我的路由器管理页面按预期完美工作(对于任何感兴趣的人,我将 cloudflare subdomain.mydomain.com 指向 ipv6 地址)。但是文件浏览器不是。我怀疑这是因为我正在尝试指定要重定向到的端口。有没有可能用 nginx 做这样的事情?或者有没有更好的替代方案,不涉及修改 /etc/hosts 或设置您自己的 dns 服务器?

编辑: 不好意思,我实际上是在 cloudflare 中输入了错误的 ipv6 地址。它缺少 1 位数字,因此它永远无法工作。我更正了 ip,效果很好。接受的答案使用 urls 更巧妙地做到了这一点,而不是对 ipv6 进行硬编码,这是一个好主意!请注意,如果您使用的是 ipv6 服务器,那么您将在 [::]:80 端口

中收听

删除 listen 指令中的 IPv6 地址并改为添加 server_name 指令:

http {
    # redirect to my router page
    server {
        listen 80;
        server_name router.mydomain.com;
        return 302 http://192.168.0.1;
    }
    # redirect to filebrowser
    server {
        listen 80;
        server_name filebrowser.mydomain.com;
        return 302 http://192.168.0.2:1111;
    }
}

I do not want to set up a local dns server either as it will probably slow down the resolution of internet domains

这可能是一个错误的假设。像 dnsmasq 这样的东西能够解析本地名称并将所有其他 DNS 查询转发到上游服务器(如 8.8.8.81.1.1.1),缓存结果。因此,如果设置正确,在这种情况下您不需要域或 VPS。