动态地将具有相同url路径的所有请求重定向到相同的上游服务器

问题描述:

我试图创建一个基本的nginx LB,它将请求重定向到同一上游服务器,如果url路径不依赖发件人cookie/ip而重复发送。动态地将具有相同url路径的所有请求重定向到相同的上游服务器

例如可以说我有一个名为LB A.com和目标称为A.com/target。 第一次发送请求到A.com/target LB会重定向到上游的一个随机服务器,到目前为止这么好,问题在于第二个请求具有相同的url路径(不谁提出这个请求,因此cookies不存在问题)我需要LB重定向到它上次重定向到的同一个服务器。

我只是不能让它正常工作,所以我想问问任何人是否有正确的方法来做到这一点与nginx或任何其他简单的LB.

在版本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; 
} 
+0

我可以在uri中的特定部分上执行它,例如对照正则表达式Capture组运行它吗? – Rewire

+0

当然。将$ scheme:// $ host $ request_uri替换为$ myvar,并将包含myvar的位置定义为命名捕获。位置〜^ /(?。*)$为例。 – silinxey