nginx中的uptream是否不支持被嵌套?

新手上路,请多包涵

原配置写成:

#Dynamic Server list
upstream dynamic_server_group {
server dn1.xxx.com;
}
#Static Server list
upstream static_server_group {
server dn2.xxx.com;
server dn3.xxx.com;
}

server{
    location / {
        index index.html index.htm
        proxy_pass http://static_server_group 
        if ($query_string ~*/"name=(.*)$"){
            proxy_pass http://dynamic_server_group 
            #如果传参后跳转动态查询服务器。
        }
    }
}

以上配置在url传参时并不跳转到动态服务器执行查询。而是还是跳转到静态服务器上。

我修改为一下配置后可以实现:

#Static Server list
upstream static_server_group {
server dn2.xxx.com;
server dn3.xxx.com;
}

server{
    location / {
        index index.html index.htm
        proxy_pass http://static_server_group 
        if ($query_string ~*/"name=(.*)$"){
            set $dynamic_server dn1.xxx.com
            proxy_pass http://$dynamic_server 
        }
    }
}

请问是否nginx不支持在location中嵌套使用多个upsteam设置?

阅读 3k
1 个回答

你的 location 中的 if 是发生在 rewrite 阶段的逻辑,所以达不到你想要的效果
你需要看下 nginx 各个配置在 nginx 的哪个阶段生效..

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题