На основе этот ответ, Я могу успешно переопределить серверную часть с помощью параметра запроса:
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
.