HAProxy使用查询参数覆盖后端cookie

基于这个答案 ,我可以用查询参数成功覆盖后端:

backend servers balance roundrobin cookie SERVERID insert indirect nocache use-server web1 if { urlp(SERVERID) -i web1 } use-server web2 if { urlp(SERVERID) -i web2 } server web1 web1-internal:80 check cookie web1 server web2 web2-internal:80 check cookie web2 

不过,我希望在后续的要求中“坚持” 即我想要一个新的Set-Cookie与查询参数的值来覆盖任何现有的SERVERIDcookies。 如果请求带有有效的SERVERID Cookie,则HAProxy不会添加Set-Cookie。 删除indirect选项不起作用。

是唯一的解决scheme使用preserve和后端始终与Set-Cookie响应,或者有办法在HAProxy中做到这一点?

我通过创build新的后端来设置SERVERID cookie并通过前端指令路由到他们。

 frontend http_in acl set_current_site_cookie urlp(current_site) true acl set_snapshot_site_cookie urlp(snapshot_site) true bind *:80 use_backend set_current_site_cookie if set_current_site_cookie use_backend set_snapshot_site_cookie if set_snapshot_site_cookie default_backend servers backend set_current_site_cookie cookie SERVERID insert server current_site server.com:80 cookie current_site backend set_snapshot_site_cookie cookie SERVERID insert server snapshot_site snapshot-server:80 cookie snapshot_site backend servers cookie SERVERID insert indirect nocache server current_site server.com:80 cookie current_site weight 50 server snapshot_site snapshot-server:80 cookie snapshot_site weight 50 

我们将这个用于分阶段发布,将servers后端的权重设置为0,然后使用查询参数current_site=true进行testing。