Назад | Перейти на главную страницу

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 со значением из параметра запроса перезаписывал любые существующие файлы cookie SERVERID. HAProxy не добавляет Set-Cookie, если запрос пришел с действительным SERVERID Cookie. Удаление indirect вариант не сработал.

Единственное решение для использования preserve и должен ли бэкэнд всегда отвечать Set-Cookie, или есть способ сделать это в HAProxy?

Я сделал это, создав новые серверные части, которые устанавливают cookie SERVERID и перенаправляют их через директивы внешнего интерфейса.

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 backend до 0, а затем тестирование с использованием параметра запроса current_site=true.