如何将请求的请求参数与Nginx中的字符串数组进行比较

如何将请求的请求参数与Nginx中的字符串数组进行比较,nginx,Nginx,在Nginx中,我们可以像这样比较请求的请求参数 location / { if ( $arg_cmd = "export_query" ) { add_header x-served-from "replica"; proxy_pass http://replica-first; break; } ... 目前,我们正在尝试将带有某些特定参数的请求重定向到其他服务器。这些参数有数百个 如何在nginx中对数组进行参数匹配 map $arg_cmd $replica {

在Nginx中,我们可以像这样比较请求的请求参数

location / {
if ( $arg_cmd = "export_query" ) {
    add_header x-served-from "replica";
    proxy_pass http://replica-first;
    break;
}
...
目前,我们正在尝试将带有某些特定参数的请求重定向到其他服务器。这些参数有数百个

如何在nginx中对数组进行参数匹配

map $arg_cmd $replica {
  "export_query" replica-first;
}

server {
  ...
  location / {
    if ($replica) {
      add_header x-served-from $replica;
      proxy_pass http://$replica;
      break;
    }
  }
  ...
map
上的文档是


注意:在
proxy\u pass
中使用变量将需要。

您应该将if条件移动到位置块之外,并将其放置在任何位置指令之前的服务器块中,以防止在同一位置处理的请求与if条件不匹配时出现意外结果。无需在映射中将
default
设置为空字符串,如果不满足指令中的任何条件,则没有默认参数,变量将为空。如果您的匹配/重定向需求更复杂,您可以将请求传递到上游服务器,并使用从返回的
x-Accel-redirect
头值进行重定向upstream@miknik谢谢你的建议!注意:范围在
位置
内部,不能在外部使用。