Создаём простую конфигурацию Nginx, позволяющую организовать split-тестирование разных разделов или страниц ресурса.
Примеры конфигурации.
В Nginx предусмотрена специальная директива split_clients, с её помощью мы можем задать переменные для a/b тестирования и провести его.
—
Простейшая реализация конфигурации для теста разных страниц будет выглядеть следующим образом:
http { ... split_clients "${remote_addr}AAA" $variant { 20% .first; 30% .second; * ""; } ...
server { ... location / { index index${variant}.html; ...
Здесь в секции http мы в рамках переменной variant определяем три возможных варианта с нужной нам вероятностью. Затем, уже в секции server, в нужном нам location мы просто подставляем переменную в адрес страницы, после чего, наши пользователи, с учётом заданной ранее вероятности будут попадать на одну из них. Разумеется, странички index.first.html, index.second.html и index.html должны быть подготовлены заранее.
—
Очень похожим способом, но с добавлением редиректа, мы можем организовать тестирование разных разделов сайта. Конфигурация, при этом, будет такой:
http { ... split_clients "${remote_addr}AAA" $destination { 30% https://sysadmin.pm/first/; 20% https://sysadmin.pm/second/; 10% https://sysadmin.pm/third/; 40% https://sysadmin.pm/main/; } ...
server { rewrite ^/need-test/$ $destination redirect; }
В примере выше, перечислены четыре варианта адресов для редиректа и их вероятность, а в секции server просто выполняется сами редирект, с учётом определённых в рамках split_clients переменных.
—
И конечно же, мы можем применить и proxy_pass по аналогии. В этом случае, конфигурация будет выглядеть примерно так:
http { ... upstream ver_a { server 1.2.3.4:8001; } upstream ver_b { server 1.2.3.4:8002; } split_clients "${arg_token}" $appver { 80% ver_a; * ver_b; } ...
server { ... location / { proxy_set_header Host $host; proxy_pass http://$appver; }
В примере выше у нас определены два приложения, которые размещены на разных портах, с помощью split_clients заданы параметры для split-тестирования (в том числе и заранее предусмотренный token, который будет передаваться в запросе), а уже в рамках location с помощью proxy_pass запрос передаётся на нужный бекенд.
Проверяем работу.
Быстро проверить работает ли редирект можно, например, с помощью сервиса ping-admin.ru. Допустим у нас есть простой тест:
split_clients "${remote_addr}AAA" $destination { 50% https://sysadmin.pm/first/; 50% https://sysadmin.pm/second/; } ... rewrite ^/need-test/$ $destination redirect;
Открываем сервис и переходим к проверке доступности сайта. Вводим адрес https://sysadmin.pm/need-test/ Выбираем несколько локаций и запускаем проверку. В результатах проверки можно будет увидеть, как при обращении к URL выполняются редиректы:
Вот так, достаточно просто можно на уровне веб-сервера организовать split тестирование различных частей сайта или веб-приложения.
А можно ли добавить фильтры, чтобы в A/B-тест попадали только новые пользователи (Номер визита = 1)?