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

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 覆盖任何现有的 SERVERID cookie。如果请求带有有效的 SERVERID Cookie,则 HAProxy 不会添加 Set-Cookie。删除该indirect选项不起作用。

唯一的解决方案是使用preserve并让后端始终使用 Set-Cookie 进行响应,还是有办法在 HAProxy 中执行此操作?

答案1

我通过创建设置 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

相关内容