Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
269 views
in Technique[技术] by (71.8m points)

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设置?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...