我nas没有公网,域名都解析到vps了怎么通过简单设置把所有域名流量都给到nas

178 次阅读

本文最后更新于 2026年5月18日。

我想要的不是代理单个网站,这样的我的openresty已经实现了,我想要的效果是,域名解析到vps,我的vps直接把域名发给nas,内网穿透我已经做好了,然后nas根据域名返回对应的网站数据

VPS 上的 OpenResty 只是把请求当成普通的 HTTP 流量转发,导致你每增加一个子域名,都得在 VPS 和 NAS 上各配置一遍。

你想要的本质是 “透明转发”:VPS 只做一个流量的“搬运工”,把所有 *.yourdomain.com 的原始请求(保留 Host 头)打包扔给内网 NAS,由 NAS 上的 Nginx 或应用根据域名自行分发。

以下是实现“一次设置,终身免动 VPS”的两种最快方案:


方案一:OpenResty / Nginx 泛域名反向代理(最灵活)

不需要在 VPS 上为每个子域名写 server 块,利用 泛域名匹配变量,你可以把所有流量直接甩给内网。

在 VPS 的 OpenResty 配置中修改:

Nginx

server {
    listen 80;
    listen 443 ssl;
    server_name *.yourdomain.com yourdomain.com; # 匹配所有子域名

    # SSL 证书建议配置在这里(泛域名证书),方便 VPS 卸载流量
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080; # 这里的 8080 是你内网穿透(如 frp)在 VPS 上监听的本地端口
        
        # 关键:必须传递 Host 头,否则 NAS 不知道用户访问的是哪个域名
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 允许长连接,提高性能
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

原理: 当用户访问 blog.yourdomain.com 时,VPS 匹配到泛域名规则,通过 $host 变量把“我想访问 blog”这个信息传给 NAS。NAS 上的 Web 服务收到请求后,识别出 Host 是 blog,就会自动跳转到对应的站点。


方案二:Stream 模块四层转发(最彻底)

如果你希望 VPS 连 SSL 证书都不管,直接把原始的加密数据包(TCP 流量)转发给 NAS(由 NAS 负责 SSL 握手),你可以使用 Nginx 的 stream 模块

在 VPS 的 nginx.conf 中(注意不在 http 块内):

Nginx

stream {
    map $ssl_preread_server_name $backend_name {
        hostnames;
        *.yourdomain.com  nas_server;
        yourdomain.com    nas_server;
    }

    upstream nas_server {
        server 127.0.0.1:7000; # 内网穿透的穿透端口
    }

    server {
        listen 443;
        proxy_pass $backend_name;
        ssl_preread on; # 关键:预读 SNI 信息但不解密
    }
}

优点:

  • 零配置: VPS 不需要安装任何证书,完全透传。

  • 极简: 只要内网穿透隧道通了,VPS 就像一根网线,以后你在 NAS 上加 100 个网站,VPS 都不用动一下。


关键检查点

  1. 内网穿透配置: 确保你的 Frp 或其他工具配置的是 TCP 模式(对应方案二)或者 HTTP 模式(对应方案一)。

  2. NAS 端的接收: NAS 上需要有一个“总管”服务(如 Nginx Proxy Manager 或另一个 OpenResty),它配置了具体的 server_name 来承接从 VPS 传过来的流量。

  3. 泛域名解析: 确保你的域名 DNS 解析中,* 记录已经指向了 VPS 的 IP。