Вопрос о балансировке нагрузки.

CoDDoC coddoc на mail.ru
Пт Ноя 30 10:07:49 UTC 2018


Доброе время суток!

Существует ли в принципе возможность получить в какую-то переменную имя бэкенд-сервера, выбранное в директиве upstream?

Задача такая.
Есть основной сервер example.com, на котором: nginx <=> php <=> БД
и несколько бэкендов-хранилок в том же домене, но в разных ДЦ (допустим, s1.example.com, s2.example.com и т.д.)
Соответственно:
upstream backends {
    server s1.example.com;
    server s2.example.com;
    server s3.example.com;
    .....
}
Пользователь авторизуется на основном сервере, получает сессию и куки.
Каждому пользователю выдаются куки с одинаковами именами, но разными значениями.
Кроме того, для каждого пользователя создаются хэши, привязанные к его сессии и кукам.

Требуется отдать с ОСНОВНОГО сервера html, содержащую ссылки вида:
- для пользователя A - <a href= 's1.example.com/path/<hash 1>/file'> ,
- для пользователя B - <a href= 's2.example.com/path/<hash 2>/file'> ,

После чего каждый из них тянет нужный файл с выбранной хранилки.

Т.е. не пробрасывать запрос на хранилку через proxy_pass backends, а только получить имя бэкенда, выбранного с учетом правил в upstream. И получив это имя в какую-то переменную, передать его в php, отвечающий за выдачу html страницы из соответствующего локейшена.

Заранее благодарю за любые конструктивные идеи.

--
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20181130/f7d941f8/attachment.html>


Подробная информация о списке рассылки nginx-ru