@demsi

Nginx — как отправить половину пользователей на другой URI?

Есть две модификации веб приложения
/var/www/new_app
/var/www/old_app
root настроен на /var/www

Url На который заходят все пользователи - example.com/old_app/index.html. Данный url менять пока нельзя.
В nginx приходят запросы /old_app/index.html

Хочется сделать, так чтобы половина запросов уходило на /new_app/index.html
Сделать
rewrite ^/old_app/index.html$ /new_app/index.html;

Не проблема.
Но как сделать, некое условие, чтобы это происходило для половины запросов. А не для всех.

UPDATE1:
Спасибо за советы.
На задачу выпало еще одно ограничение. На некоторые приложения запросы проксируются со сторонних ресурсов.
Поэтому в некоторые приложения идут запросы от одного ip и UA.
Следоветельно ngx_http_split_clients_module нам не очень подходит. Не понятно по какому параметру разделять запросы.

Поэтому решил воспользоваться советом Lindon_cano:
"1. Делаете в nginx еще два хоста слушающих разные порты на 127.0.0.1, а в основном nginx прописываете upstream с ними обоими и можете с весом играть, как хотите, хотите половину отправлять на один, а половину на другой, хотите треть и две трети, как будет угодно."
  • Вопрос задан
  • 639 просмотров
Решения вопроса 2
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Есть специальный модуль для подобных вещей - ngx_http_split_clients_module.
Ответ написан
@Lindon_cano
Я вижу несколько путей решения вашей проблемы.

1. Делаете в nginx еще два хоста слушающих разные порты на 127.0.0.1, а в основном nginx прописываете upstream с ними обоими и можете с весом играть, как хотите, хотите половину отправлять на один, а половину на другой, хотите треть и две трети, как будет угодно.
2. Решаете «мальчики налево, девочки на право» и прописываете разные редиректы для разных UA.
3. Можно не по UA, а например по GeoIP выдавать редиректы.

Если нужны подробности обращайтесь, могу помочь прикинуть конфиг.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
zelsky
@zelsky
Посмотрите что такое шардинг для бд а далее суть думаю вам будет ясна. Если нет точного опредиления кого отправлять на новый урл.
Ответ написан
qualitat
@qualitat
Первое что пришло в голову это распределение пользователей по времени.
1, 3, 5, 7, 9 - не четные числа
2, 4, 6, 8 - четные числа, + 0.

Думаю условиями и регулярками можно сделать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы