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

Делаем клиент липким без начального идентификатора сеанса с HAProxy

У нас есть HAProxy перед парой серверов API. В настоящее время используется appsession потому что многие клиенты API не будут поддерживать куки - это бремя, которое мы не хотим перекладывать на наших пользователей.

Проблема, с которой мы сталкиваемся, заключается в том, что как только клиент входит в систему, он должен оставаться на этом конкретном сервере API из-за соединений, которые серверы API устанавливают с другими службами от имени клиента. К сожалению, идентификатор сеанса не существует до тех пор, пока не будет сделан первый запрос на вход, поэтому следующий запрос, сделанный с идентификатором сеанса, обычно отправляется на противоположный сервер и остается там.

Вот наша конфигурация бэкенда:

backend api
      mode http
      option httplog
      option httpclose
      option httpchk HEAD /index.html
      cookie apibalance insert indirect nocache
      appsession sessionId len 36 timeout 360s request-learn mode query-string
      server api01 api01.hostname:8080 cookie api1 check weight 30 inter 10000 downinter 20000
      server api02 api01.hostname:8080 cookie api2 check weight 30 inter 10000 downinter 20000

В cookie apibalance осталось от того, как мы что-то делали, но я полагаю, что мы, вероятно, можем удалить его сейчас.

Есть ли способ сообщить HAProxy, возможно, через ответ, что будущие запросы, сделанные с sessionId внутри строки запроса должен придерживаться текущего сервера? Идентификатор сеанса создается на стороне сервера (сервер API) и возвращается в ответе JSON. Последовательные запросы будут отправляться с идентификатором сеанса в строке запроса.

Ответ, по крайней мере для меня, заключался в том, чтобы сделать привязку на основе IP.

balance source

И удалите конфигурацию на основе файлов cookie и приложений.