O método atual não funciona porque você está tentando capturar a string de consulta na expressão regular de uma diretiva rewrite
. nginx
usa um URI normalizado para avaliar as diretivas rewrite
e location
, o que não inclui o ?
nem nada que o segue.
Você pode encontrar a string de consulta na variável $request_uri
, a variável $args
- ou dividir entre as variáveis $arg_xxx
. Consulte este documento para obter detalhes.
Você pode aplicar uma expressão regular a uma dessas variáveis usando uma instrução if
ou map
.
O exemplo abaixo usa uma diretiva map
(consulte este documento para obter detalhes) com uma expressão regular e duas capturas nomeadas para reconstruir sua lista de argumentos obrigatórios. O URI upstream é anexado à diretiva proxy_pass
(consulte este documento para obter detalhes).
map $args $newargs {
default $args;
~*^(?<prefix>service=a_service_prod)&(?<suffix>id_number=(?:1234701|1234708|1234802|1234808|1234812|1234902)\d+&.*)$ $prefix.sub_service&operation=sub_service&$suffix;
}
server {
...
location /dest {
proxy_pass http://192.168.1.1:1440$uri?$newargs;
...
}
}