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

Nginx配置:按子域名列表分流至不同版本Node应用

Nginx配置:按子域名列表分流至不同版本Node应用

我明白你的需求啦——要让已有的特定子域名用户访问旧版Node应用(8090端口),新子域名用户自动导向新版应用(8091端口)。Nginx本身没有代码里那种数组和includes语法,但我们可以用map指令来实现这个分流逻辑,比直接用if判断更高效可靠。

具体配置方案

Nginx的map是用来根据变量值映射出新变量的工具,我们可以用它来把请求域名和对应应用端口绑定起来,替代你构想的数组判断逻辑:

  1. 首先在Nginx的http块中添加映射规则
    把你的旧子域名列表逐一列在这里,匹配到的就指向旧应用端口,未匹配的新子域名默认指向新应用端口:

    http {
        # 保留你原有http块里的配置(比如include mime.types;等)
    
        # 定义域名到应用端口的映射
        map $host $target_port {
            # 旧子域名列表,对应旧应用8090端口
            app1.example.com 8090;
            app2.example.com 8090;
            # 所有其他域名(新子域名、主域名等)默认指向新应用8091端口
            default 8091;
        }
    
        # 你的server块放在这里
        server {
            root /var/www/html;
            index index.html index.htm index.nginx-debian.html;
            server_name *.example.com example.com www.example.com;
    
            location / {
                # 用映射后的端口做反向代理
                proxy_pass http://localhost:$target_port;
                proxy_http_version 1.1;
                # 保留你原有proxy相关的配置(比如proxy_set_header等)
            }
        }
    }
    
  2. 验证配置并重启Nginx
    修改完配置后,先测试语法是否正确:

    sudo nginx -t
    

    如果输出显示test is successful,就可以重启Nginx让配置生效:

    sudo systemctl restart nginx
    

补充说明

这种方式比直接用if判断更符合Nginx的设计规范——if在location块中容易引发一些意想不到的请求处理异常,而map是在请求处理初期就完成映射,性能更稳定。后续如果要添加更多旧子域名,只需要在map块里新增一行xxx.example.com 8090;即可,维护起来非常方便。

备注:内容来源于stack exchange,提问作者jack blank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:24:50