Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Smart load balancing
- To: nginx-ru <nginx-ru@xxxxxxxxx>
- Subject: Smart load balancing
- From: Daniel Podolsky <onokonem@xxxxxxxxx>
- Date: Wed, 20 Jan 2010 16:37:35 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=Uh1G9jAga6JjAfJmMpQVjT55dDWuK70XXi1tRWP+Z1U=; b=vhvZAvpNtxNge612y086HSV85q7LijlF9APCeJSVxOxejqqrZUwp7s7nZpfc5aJAcL 7baqHSKOdVKOLVx6PpUQ72K00VcCIprHg9C/ZFRH6xiX2MoXax9OfQcN6gzIWXUxJOSc 1ztBxpDGHfkzrmB0jBUHbAVGatPA2wcYGvZ14=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=JOahgmIpoaYee3gFBgAcs8bewYHt9UOJIOkyo3lwjKdojaDQRyePyn1R6uyrU6g4fT 6p5UPExXACqATMlJ99r/QfvNfEwLzqsLczn6rlT8xSsnwpeYtnatQzyKWQKrkPOmvmVZ S4eL5YiO3X9sRdUaGP2dQzRg7hLN3sAbpxgpY=
День добрый!
Изобретаю схему для лоадбалансинга пары бекендов. Бекенды не
масштабируются, так что прийдется изобретать хитромудрое...
Идея такая:
1. Получаем запрос от клиента
2. Проверяем наличие и валидность некоей куки. Кука содержит в себе
имя бекенда, собственный экспайр и md5 для проверки валидности.
Проверять хорошо бы прямо в nginx, но можно и сходить куда-нибудь.
Например - на третий бекенд, который распределением занимается.
3. Усли кука отсутствует/невалидна - переходим к пункту 7.
5. Раз уж кука валидна - проксируем запрос на соответствующий бекенд.
6. К ответу бекенда добавляем свою куку - с обновленным экспайром - и
отдаем его клиенту.
Куку хочется посчитать прямо в nginx.
7. Проверяем годность запроса - должен быть post с определенным параметром.
Это если проверить можно прямо в nginx.
Если надо ходить на сторону - там же на стороне будут проделаны и пункты 8 и 9.
8. Если запрос негодный - вырезаем из него аутентификационную куку и
проксируем на любой из бекендов, чтобы отдать клиенту форму логина.
Проверить годность запроса хочется прямо на nginx.
9. Если параметр есть - ищем ему соответствие в таблице.
Хочется при поиске использовать регулярные выражения. Результатом
поиска станет имя бекенда, или ничто.
Искать хочется прямо в nginx, таблица там недлинная, можно и
заблокироваться. Но можно и сходить на сторону.
10. если соответствие нашлось - переходим к пункту 5.
11. Раз соответствия нет - выдаем статическую страницу с ошибкой и
просьбой обратиться к администратору.
Вопросы:
1. Можно ли это реализовать? Я не очень пока понимаю - что можно
сделать стандартными средствами, что - с использованием перла. А,
может, что-то нельзя вообще. Вот пункт 8 - можно? А 2?
2. Поделитесь, пожалуйста, примерами конфигов, ну или ссылками на
соответствующие разделы документации.
Спасибо.
С уважением,
Даниил Подольский.
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|