Nginx加粘性路由方法是否适用于基于路由的负载均衡?

时间:2016-02-02 19:13:57

标签: nginx load-balancing

我之前发布过这个问题: https://stackoverflow.com/questions/34977074/how-to-use-load-balancer-for-sockets

基本上我的要求是通过负载均衡器向特定的应用服务器发送特定的URL请求。所以我正在寻找一种可以完成我的要求的负载均衡器。

我正在阅读关于nginx plus的内容,并找到了此链接。 https://www.nginx.com/resources/admin-guide/load-balancer/

本文档中有一个粘性路径的概念。我只是想知道它能否达到我的目的?

2 个答案:

答案 0 :(得分:2)

我相信你需要的东西可以由HAProxy完成,它比NginX做更专业的负载平衡。

它具有以下功能:您可以使用URI将基于ACL的特定请求定向到特定的后端服务器。这是一个非常简单的例子(来自默认配置文件):

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:5000
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check
#---------------------------------------------------------------------

如需更多阅读,请查看official HAProxy Docs

答案 1 :(得分:0)

粘性路由(也就是粘性会话或会话持久性)是关于保持客户端连接到同一个上游。如果您负载平衡登录的用户会话,付款交易等,这将非常有用。

我相信你要找的是基于位置的路由。这会将/ payment / *等请求路由到一组上游,将/ login / *路由到另一组上等。在Microservices Solutions页面上有关于此的部分。

您要做的是定义几个上游组,然后在不同的位置块内对这些上游进行proxy_pass。我将在这里提供一个简短的例子:

upstream payments {
     server backend1.example.com
     server backend2.example.com
}

upstream login {
     server backend3.example.com
     server backend4.example.com
}

server {
     ...
     location /payments {
          proxy_pass http://payments;
     }

     location /login {
          proxy_pass http://login;
     }
}
  • 如果您对NGINX Plus有任何疑问,我建议您使用提供的商业支持渠道。

(免责声明:我在NGINX工作。)