HAProxy substitui o cookie de backend usando o parâmetro de consulta

1

Com base em esta resposta , posso substituir com êxito o back-end por um parâmetro de consulta:

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

No entanto, gostaria que isso "persistisse" nas solicitações subsequentes; Ou seja, eu quero um novo Set-Cookie com o valor do parâmetro de consulta para sobrescrever quaisquer cookies SERVERID existentes. HAProxy não adiciona um Set-Cookie se a solicitação chegar com um cookie SERVERID válido. Remover a opção indirect não funcionou.

A única solução é usar preserve e ter o back-end sempre respondendo com Set-Cookie, ou há uma maneira de fazer isso no HAProxy?

    
por Kevin 12.01.2017 / 06:02

1 resposta

1

Eu fiz isso criando novos backends que definem o cookie SERVERID e o roteamento para eles através de diretivas frontend.

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

Usamos isso para lançamentos graduais, definindo o peso no backend servers para 0 e testando usando a consulta param current_site=true .

    
por 10.05.2017 / 00:13

Tags