gpt4 book ai didi

nginx - proxy_pass 基于 header 而不使用 if 条件

转载 作者:行者123 更新时间:2023-12-04 01:59:24 31 4
gpt4 key购买 nike

我正在寻找一种方法来重新路由所有在 HTTP header 中设置了帐户 ID 的请求 Account-ID与最后两位数字(十位数字的)0005 (仅触及总流量的 5%)。另外,如果一个请求设置了HTTP头Server-A ,无论设置的帐户ID如何,该请求都应转发到该服务器。否则,默认情况下,所有流量都应由 server-b 处理。我当前的位置规则如下所示:

location /rest/accounts/ {
if ( $http_account_id ~ '([\d]{8})(0[0-4])') {
proxy_pass http://server-a.company.com;
}

if ( $http_server_a = true) {
proxy_pass http://server-a.company.com;
}

proxy_pass http://server-b.company.com;
}

正如我在官方文件中看到的那样 here , if被认为是邪恶的。

对于我的方法,是否有更好的解决方案不被认为是邪恶的?

最佳答案

你实际上可以链接 map指令 a 这将使它更干净。例如:

map $http_server_a $server_a_check {
default "http://server-b.company.com";
"" "http://server-a.company.com";
}

map $http_account $account_check{
default $server_a_check;
"~([\d]{8})(0[0-4])" "http://server-a.company.com";
}

server {
....
location / {
proxy_pass $account_check;
}
}

所以 proxy_pass正在从 $account_check 获取其值(value)对 Account 进行检查带有正则表达式检查的标题。然后,如果没有一个变体通过他们的检查, default$server_a_check 的结果中获取其值寻找 Server-A标题没有该值的数据,因为问题没有说明接受的值是什么。

关于nginx - proxy_pass 基于 header 而不使用 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48459748/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com