我使用粘性会话对后端服务器进行有状态请求。Haproxy设置cookie,设置运行良好。现在,我希望通过一个用于测试的查询字符串和不能使用cookie的客户端来设置所需的后端服务器。
这两种卷发应该指向相同的后端:
curl mysite.com -I --cookie "serverid=app-2"
curl mysite.com?serverid=app-2 -I我尝试过许多配置组合,但都没有效果。
backend myapp
cookie serverid insert indirect nocache
stick-table type string len 32 size 1M
stick on cookie(serverid)
stick on url_param(serverid)
server app-0 111.111.111.111:80 cookie app-0
server app-1 222.222.222.222:80 cookie app-1
server app-2 333.333.333.333:80 cookie app-2有可能在哈代做这件事吗?
发布于 2016-05-19 13:18:20
是的,有可能。
Stick表支持客户端服务器的持久性,但它们没有定义给定的客户端最终在哪个服务器上。这就是cookie指令所做的(与server指令的cookie选项相结合)。
不幸的是,如果您的客户不支持cookie,那么它就没有多大用处。
解决这个问题的方法是使用一组use-server行来捕获这些情况。这些都是在cookie路由之前处理的,并且优先于cookie路由,因此如果use-server匹配,它将被使用。
考虑到您请求问题中提到的两个curl命令在同一个框中结束,这个配置在我的测试中适用(尽管它可能是非常小的)。
backend myapp
cookie serverid insert indirect nocache
use-server app-0 if { urlp(serverid) -i app-0 }
use-server app-1 if { urlp(serverid) -i app-1 }
use-server app-2 if { urlp(serverid) -i app-2 }
server app-0 142.135.221.205:10001 cookie app-0
server app-1 142.135.221.205:10002 cookie app-1
server app-2 142.135.221.205:10003 cookie app-2如果您有超过3台服务器,它将变得有点笨重,但这是目前我能看到的唯一方式,使它的工作方式,你需要。
https://serverfault.com/questions/777567
复制相似问题