【问题标题】:Dynamically redirect all requests with the same url path to the same upstream server将所有具有相同url路径的请求动态重定向到同一个上游服务器
【发布时间】:2017-06-05 08:59:46
【问题描述】:

我正在尝试创建一个基本的 nginx LB,如果 url 路径重复自身而不依赖于发件人 cookie/ip,它将请求重定向到同一个上游服务器。

例如,假设我有一个名为 A.com 的 LB 和一个名为 A.com/target 的目标。 第一次向 A.com/target 发送请求时,LB 会重定向到上游的随机服务器,到目前为止一切顺利,问题在于第二次请求具有相同的 url 路径(不管是谁发出这个请求,cookie 是不可能的)我需要 LB 重定向到它上次重定向到的同一台服务器。

我只是无法让它正常工作,所以我想问一下是否有人有正确的方法来使用 nginx 或任何其他简单的 LB。

【问题讨论】:

    标签: http redirect nginx load-balancing


    【解决方案1】:

    您可以借助 1.7.2 版本中引入的 nginx 上游哈希功能通过 URL 进行平衡 官方文档在这里here

    upstream backend {
        hash $scheme://$host$request_uri; # put any variables here
    
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    

    【讨论】:

    • 我可以在 uri 中的特定部分执行此操作,例如针对正则表达式捕获组运行它吗?
    • 当然。将 $scheme://$host$request_uri 替换为 $myvar 并定义一个包含 myvar 作为命名捕获的位置。位置 ~ ^/(?.*)$ 例如。
    【解决方案2】:

    您还可以考虑在哈希行的末尾添加“一致”参数,以避免在上游服务器更改(添加或删除)的情况下进行大量重新哈希。 Haproxy 也是一个选项,它为后端部分提供“哈希类型一致”参数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2013-11-27
      相关资源
      最近更新 更多