Создание клиента липким без начального идентификатора сеанса с 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 и конфигурацию на основе приложения.