2015-06-16 2 views
4

Я пытаюсь определить липкость в Apache. Вот определение в proxy.conf:Apache/Определить липкость с помощью JSESSIONID

<Proxy balancer://fs1> 
    BalancerMember https://localhost:5006/doc route=node1 
    BalancerMember https://localhost:5008/doc route=node2 
    ProxySet stickysession=JSESSIONID|jsessionid 
</Proxy> 
ProxyPass /doc balancer://fs1 

или:

ProxyPass "/doc " "balancer://fs1" stickysession=JSESSIONID|jsessionid scolonpathdelim=On 
<Proxy balancer://fs1> 
    BalancerMember https://localhost:5006/doc route=node1 
    BalancerMember https://localhost:5008/doc route=node2 
</Proxy> 

Я пытаюсь использовать параметры запроса URL, чтобы достичь клейкости (потому что я понимаю, что не рекомендуется, чтобы переопределить кук) , Как написано в документации Apache:

Второй способ реализации липкости - кодирование URL. Сервер выполняет поиск параметра запроса в URL-адресе запроса. Имя параметра указано снова с использованием stickysession. Значение параметра используется для поиска сотрудника-члена с маршрутом , равным этому значению. Так как нелегко извлечь и обработать все URL-ссылки, содержащиеся в ответах, как правило, работа по добавлению параметров к каждой ссылке выполняется с помощью контентера, создающего . В некоторых случаях это может быть осуществлено с помощью сервера с использованием mod_substitute или mod_sed. Тем не менее это может отрицательно сказаться на производительности .

Я посылаю следующий запрос 10 раз в почтальона:

https://{{myserver}}/doc?jsessionid=node1 

Я замечаю, что запросы передаются node1 (5 запросов) и node2 (также 5 запросов). Но я определяю stickysession, поэтому он должен выбрать node1 и каждый раз переходить к этому узлу.

Моя цель состоит в том, что клиент отправляет запрос https://{{myserver}}/doc?jsessionid=nodeX, и запрос будет проходить в nodeX (без использования печенье .., только с помощью stickyness является кодирование URL).

Например, клиент отправляет запрос https://{{myserver}}/doc?jsessionid=node1 10 раз. Каждые 10 раз запрос будет обслуживаться https://localhost:5006.

Что я делаю неправильно?

+0

Вы сказали, что вы определили„заголовок“„JSessionID а12“.Но конфигурация Apache будет искать _cookie_ по имени JSESSIONID со значениями node1 или node2. Что такое вход, cookie или нет? – covener

+0

@covener: Спасибо за ваш комментарий. Теперь я пытаюсь использовать параметр URL-запроса. Поэтому я отправляю следующий {myserver}/doc? Jsessionid = node1. Он по-прежнему подходит к 5006 и 5008. – MiddleWare

ответ

2

После некоторого поиска я определил проблему. Для маршрутизации через параметры URL-запроса вы должны включить '.' до «node1», как так:

https://{{myserver}}/doc?jsessionid=.node1 

Этот блог указал мне в правильном направлении:

Это очень важно, что маршруты названы алфавитно-цифровой префиксом, точкой, а затем число. Например: server.1, t.2 и т. Д. Код mod_proxy_balancerразбивает это имя маршрута с помощью точки и использует второе значение в качестве номера маршрута. Так s.1 будет указывать на «путь = 1" http://hkrishnan.in/2013/10/14/debugging-apache-mod_proxy_balancer/

Я испытал это сам, и он прекрасно работает!

+0

Хороший! Благодарю. – MiddleWare

Смежные вопросы