haproxy reqrep的问题

脚本

我有一个3(apache)web服务器haproxy农场。 2是主动平衡的,第三个是正常备份。

每隔一段时间,我想把第三台服务器从备份angular色中取出来,并把它变成一个“补丁”服务器。 但是我想在不更改url的情况下执行此操作(例如,我不想使用patch.mysite.com)

我想要发生的是,我访问http://mysite.com/patch并让haproxy为服务器提供一个cookie,以便以后在ACL中使用,但删除/patch并发送GET /到后端服务器。

我现在所在的地方是ACL工作正常,但是reqrep在发送到后端之前并没有删除/补丁请求。

configuration:

 global log 127.0.0.1 local0 info maxconn 25000 daemon spread-checks 2 defaults log global mode http balance roundrobin option httplog option redispatch option abortonclose option forwardfor option http-server-close frontend webfarm :80 # FILTERING acl acl_patch path_end /patches use_backend patch if acl_patch default_backend default_farm backend default_farm cookie SERVERID insert indirect server prod1 192.168.100.18:80 cookie live01 check server prod2 192.168.100.22:80 cookie live02 check weight 2 server prod3 192.168.100.20:80 cookie live03 check backup # do not let this cookie tell our internal IP address rspidel ^Set-cookie:\ IP= backend patch cookie SERVERID insert indirect server prod3 192.168.100.20:80 cookie live03 reqrep ^([^\ ]*)\ /patch \1\ / # do not let this cookie tell our internal IP address rspidel ^Set-cookie:\ IP= 

haproxy日志仍然指定发送到后端的GET /patch 。 我对reqrep有什么想法(我不关心/ patch目录之后的任何内容)?

首先,你的规则也应该保持HTTP版本的一部分。

其次,你为什么不使用“强制持久”的陈述呢? 它的devise正是为了这个angular色。 只要在你的请求中find与访问者不同的内容,设置一个cookie来访问它,然后你就可以使用这个服务器。 这个操作系统正是为了维护操作而devise的,而不必让服务器看起来像其他用户一样。

或者在你的情况下,你也可以使用“redirect”方法,因为它支持“set-cookie”选项; 在你的前端,你会用这样的replaceuse_backend规则:

 redirect location / code 302 set-cookie SERVERID=live03 if acl_patch 

然后你的浏览器会学习这个cookie,并redirect到/,服务器3将处理请求。 如果你想的话,甚至还有一个清除cookie的选项可以用来消除粘性。