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

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

Проблема, с которой мы сталкиваемся, заключается в том, что после входа в систему клиент должен оставаться на этом конкретном сервере 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. Последовательные запросы будут отправляться с идентификатором сеанса в строке запроса.

1 ответ

Решение

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

balance source

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

Другие вопросы по тегам