负载均衡器中的自定义路由

时间:2014-11-04 09:10:07

标签: nginx load-balancing

是否可以在NGINX或其他负载均衡器中定义自定义路由? 即我有一个cookie或标题,根据它的价值我决定选择哪个后端服务器? 我需要一些非常简单的逻辑 - 值a1,a2,a3 - 到服务器A,值b1,b2到服务器B,所有其他逻辑到服务器C

2 个答案:

答案 0 :(得分:6)

在nginx中,您只需使用if:

即可
location / {
    if ($http_cookie  ~* "yourcookiename=a") {
        proxy_pass http://upstream_a;
        break;
    }
    if ($http_cookie ~* "yourcookiename=b") {
        proxy_pass http://upstream_b;
        break;
    }
    proxy_pass http://upstream_c;
}

这是一个简单的正则表达式,所以这种方式如果“yourcookiename”具有值a1,a2等,它将转到uprstream_a,依此类推。 希望它有所帮助...

答案 1 :(得分:4)

如果你需要一些粘性会话,有开源的第三方模块可以用nginx做到这一点,而本机实现是商业订阅的一部分。此外,由阿里巴巴开发的开源中文nginx分支机构tengine本可以做到这一点。

如果您想以自定义方式执行此操作,请使用avoid processing a chain of if blocks地图查看所有请求。这对于可读性来说也更好。例如,使用cookie:

map $cookie_mycookie $node {
    "~^a[1-3]$" "A";
    "~^b[1-2]$" "B";
    default     "C";
}

server {

    location / {
        proxy_pass http://$node;
    }

}