如何在 split_clients NGINX 中获取变量的值

如何在 split_clients NGINX 中获取变量的值

我正在使用它[split_clients],大多数情况下它都运行良好。

参考:https://nginx.org/en/docs/http/ngx_http_split_clients_module.html

split_clients返回一个字符串以供进一步使用。

但是现在,我需要返回包含一个变量的字符串,如下所示:

http语境

split_clients "${remote_addr}${http_user_agent}${date_gmt}" $my_variable {
    20%     https://example.com/fixed_string/another_fixed_string;
    *       https://example.com/$1/another_fixed_string;
}

server语境

location ~ ^/abc/(.*) {
   rewrite ^/abc/(.*) $my_variable redirect;
}

当我访问时https://example.org/abc/something,它会重定向到https://example.com/$1/another_fixed_string,其中$1URL 中是一个文字字符串。

我的期望是$1充当变量,其值为something,然后重定向到https://example.com/something/another_fixed_string

如何实现?

答案1

正如@Gerard H. Pille 所建议的,使用map可以解决这个问题。

http语境

split_clients "${remote_addr}${http_user_agent}${date_gmt}" $my_variable {
    20%     0;
    *       1;
}

map $my_variable $my_url {
   #default you can also set the default value

   0     https://example.com/fixed_string/another_fixed_string;
   1     https://example.com/$1/another_fixed_string;
}

server语境

location ~ ^/abc/(.*) {
   rewrite ^/abc/(.*) $my_url redirect;
}

相关内容