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