使用拆分客户端进行 nginx A/B 测试

时间:2021-02-05 10:22:38

标签: nginx nginx-location

我们正在尝试使用 Nginx 的拆分客户端模块进行一些 A/B 测试,并在几个地方找到了文档

所以我们的用例是根据当前的 ip 和用户代理随机选择实验变体

split_clients "${remote_addr}${http_user_agent}" $experiment1 {
            25%    "original";
            25%    "variant1";
            25%    "variant2";
            25%    "variant3";

    }
    
split_clients "${remote_addr}${http_user_agent}" $experiment2 {
            50%    "original";
            50%    "variant1";
    }

我可以使用上述值并将其设置为多个位置的单独代理标头

    location  /x1{
    ...
        proxy_set_header experiment1 $experiment1;
        proxy_set_header experiment1 $experiment2;
    ...
    }
    
    location  /x2{
    ...
        proxy_set_header experiment1 $experiment1;
        proxy_set_header experiment1 $experiment2;
    ...
    }
location  /x3{
    ...
        proxy_set_header experiment1 $experiment1;
    ...
    }

这工作正常,但我的用例是根据现有的实验值覆盖
我的意思是,如果我已经有一个标题,让我们说实验 1,我必须使用它作为默认值而不是这个

if ($http_$experiment1) {
  set $experiment1 "$http_$experiment1";
}

我也在寻找一种方法 o 将这些实验的值结合起来,并根据位置动态地将其放入一个变量中 所以如果让我们说我有一个位置/x1,我希望 AB 是

proxy_set_header ABExperiment $experiment1=variant1;$experiment2=original

而对于 /x3,它将是

proxy_set_header ABExperiment $experiment1=variant1;$experiment2=original

我的尝试 为了根据上面提到的现有标头默认值,我尝试放置以下内容

if ($http_$experiment1) {
  set $experiment1 "$http_$experiment1";
}

但这在全球范围内不起作用。如果在拆分客户端之后或在拆分客户端内部,我不允许放置。

我必须把它放在位置标签中,我不喜欢它,因为它应该对整个位置都一样。

创建主数据的第二件事,比如应该在哪个位置使用什么实验,并将所有这些都放在一个地方,比如查找,动态获取某个位置的实验,我找不到像地图之类的方法。其中,我可以只获取某个位置的实验密钥,然后创建一个变体的连接字符串。

对不起,如果这不遵守 stackoverflow 政策

0 个答案:

没有答案
相关问题