我们正在尝试使用 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 政策