You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务器如何实现动态子域名配置

无端口暴露+动态泛子域名配置方案

核心逻辑

全程靠两个组件实现,不需要额外采购服务:

  • 反向代理:接管HTTP/HTTPS默认的80、443端口,按照请求的域名转发到本地8080端口的后端服务,对外直接关闭8080的公网访问权限,从根源上隐藏端口,用户访问的时候不需要手动输入端口号。
  • 泛域名解析:把所有*.mydomain.com格式的子域名全解析到VPS公网IP,不需要每次新增子域名都修改DNS记录,反向代理把请求的子域名信息透传给后端,后端自己处理动态子域名的路由逻辑。

注意:你之前把客户端IP 220.123.111.233绑定到mydomain.com的配置是错误的,域名A记录必须指向部署服务的VPS公网IP,否则请求会打到客户端设备,永远访问不到VPS上的服务。

操作步骤

1. 调整DNS解析记录

登录你的域名解析控制台,配置两条记录:

  • 根域名记录:类型选A,主机记录填@,记录值填VPS的公网IP,TTL用默认值即可。
  • 泛域名记录:类型选A,主机记录填*,记录值填VPS的公网IP,TTL设10分钟就行。
  • 校验方式:解析生效后,随便拼一个随机子域名比如abc123.mydomain.com,ping这个域名如果返回的是VPS公网IP,就说明泛解析配置正常。

2. 配置Nginx反向代理

用通用的Nginx做反向代理即可,先安装程序:

  • Debian/Ubuntu系执行:apt update && apt install -y nginx
  • CentOS/RHEL系执行:yum install -y nginx
    装完先调整防火墙规则:放开80、443端口的公网访问,删掉8080端口的公网放行规则,只允许127.0.0.1本地访问8080,避免被人扫端口直接绕开代理访问服务。

先修改Nginx主配置,让它支持提取子域名:打开/etc/nginx/nginx.conf,在http块的最开头加下面这段映射规则:

map $host $subdomain {
    ~^(?P<sub>[a-z0-9-]+)\.mydomain\.com$ $sub;
    default "";
}

然后新建站点配置文件/etc/nginx/conf.d/mydomain.conf,写入转发规则:

# 根域名转发规则,访问mydomain.com直接走主服务
server {
    listen 80;
    server_name mydomain.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# 泛子域名转发规则,所有xxx.mydomain.com的请求都转后端,同时透传子域名信息
server {
    listen 80;
    server_name *.mydomain.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Subdomain $subdomain;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

写完执行nginx -t,如果返回test is successful就说明配置没有语法错误,执行systemctl reload nginx重载配置就生效了。

3. (强烈建议配置)HTTPS设置

现在浏览器默认会拦截HTTP站点,直接安装certbot工具申请免费SSL证书即可,工具会自动帮你完成证书续期、443端口监听配置、HTTP请求自动跳转HTTPS的规则,配完之后访问https://mydomain.com连443端口都不需要显式输入。

4. 后端服务适配

你跑在8080端口的后端服务只需要做两处小调整:

  • 读取请求头里的X-Subdomain字段,就能拿到当前请求的子域名(比如请求是12n2.mydomain.com,拿到的值就是12n2),直接走你自己的动态子域名业务逻辑就行,比如给用户分配专属子域名、返回对应资源。
  • 业务代码里生成跳转链接的时候,直接拼接[子域名前缀].mydomain.com即可,不需要加端口号。

效果校验

  • 直接访问mydomain.com,能正常打开你之前跑在8080端口的服务,地址栏不需要带:8080,说明根域名配置成功。
  • 访问随便编的子域名比如test-001.mydomain.com,后端能正常拿到X-Subdomain值为test-001,说明泛域名转发正常,后续业务生成动态子域名的时候不需要再改DNS或者Nginx配置,直接在业务层生成对应规则即可。

内容的提问来源于stack exchange,提问作者khanh phan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:24:35