Nginx配置:按子域名列表分流至不同版本Node应用
Nginx配置:按子域名列表分流至不同版本Node应用
我明白你的需求啦——要让已有的特定子域名用户访问旧版Node应用(8090端口),新子域名用户自动导向新版应用(8091端口)。Nginx本身没有代码里那种数组和includes语法,但我们可以用map指令来实现这个分流逻辑,比直接用if判断更高效可靠。
具体配置方案
Nginx的map是用来根据变量值映射出新变量的工具,我们可以用它来把请求域名和对应应用端口绑定起来,替代你构想的数组判断逻辑:
首先在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等) } } }验证配置并重启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
相关产品推荐
相关产品推荐

