【问题标题】:nginx load balancer/location puzzlenginx 负载均衡器/位置难题
【发布时间】:2013-09-27 13:25:03
【问题描述】:

我想将 nginx 设置为负载均衡器。但我想以某种方式设置它,即某些请求(带有特定参数)只会发送到某些主机。基本上这个想法是根据原始请求使用任何主机,然后如果用户指定某些参数,例如bla0,然后将请求重定向到主机 0,而将 bla1 重定向到主机 1。所以这是我想出的配置:

# load balancing server
server {
    listen 8000;
    server_name example.com www.example.com;

    # requests to bla0 server
    location ~ ^(/request).*bla0$ {
        proxy_pass  http://localhost:8081;
    }

    # requests to bla1 server
    location ~ ^(/request).*bla1$ {
        proxy_pass  http://localhost:8082;
    }
    # for default location use balancer
    location / {
        proxy_pass  http://cluster;
    }

}

upstream cluster {
    server localhost:8081;
    server localhost:8082;
}

但不幸的是,这种配置不起作用。我总是收到循环请求,即 /request?q=bla0 去任一主机。我错过了什么。

【问题讨论】:

    标签: nginx load-balancing


    【解决方案1】:

    位置与参数不匹配。来自http://wiki.nginx.org/HttpCoreModule#location

    location 指令只尝试从第一个 / 之后匹配 主机名,就在第一个之前?或者 #。 (在这个范围内,它 匹配未转义的 url。)

    看起来您需要在 if() 中使用 arg_* 指令,但我对此并不肯定。啊,我们开始了,this 看起来像你想要的。

    【讨论】:

    • 很棒的提示,这就是我想要的。所以定位规则变成了这样:location / { proxy_pass cluster; if($args ~ pattern1) { proxy_pass host1 } if($args ~ pattern2) {proxy_pass host2} }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2013-04-28
    • 2020-08-04
    相关资源
    最近更新 更多