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 с ними обоими и можете с весом играть, как хотите, хотите половину отправлять на один, а половину на другой, хотите треть и две трети, как будет угодно."
Вам же, наверное, хочется ещё, чтобы не половина запросов редиректилась, а половина клиентов, а то посетители запутаются, да и работать наверняка будет с ошибками, если запросы рэндомно редиректить.
Алексей Уколов: Для этого можно использовать параметр ip_hash в модуле upstream. Или добавлять одним юзерам куки, и уже в зависимости от неё редиректить на нужную версию приложения, все запросы.
1. Делаете в nginx еще два хоста слушающих разные порты на 127.0.0.1, а в основном nginx прописываете upstream с ними обоими и можете с весом играть, как хотите, хотите половину отправлять на один, а половину на другой, хотите треть и две трети, как будет угодно.
2. Решаете «мальчики налево, девочки на право» и прописываете разные редиректы для разных UA.
3. Можно не по UA, а например по GeoIP выдавать редиректы.
Если нужны подробности обращайтесь, могу помочь прикинуть конфиг.