Ngnix novato aqui. Por favor, preciso de ajuda para descobrir como fazer corretamente o nginx modificar e redirecionar (proxy?) solicitações recebidas. O redirecionamento parece funcionar bem, mas a URL não é reescrita no destino.
Minha configuração é:
server {
listen 91 default_server ssl;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/ssl/domain.crt;
ssl_certificate_key /etc/nginx/ssl/domain.key;
location /dest {
rewrite ^a_service_prod&id_number=((1234701|1234708|1234802|1234808|1234812|1234902)\d+)&(.*?)$ /dest?service=a_service_prod.sub_service&operation=sub_service&id_number=$1&$2 break;
proxy_pass http://192.168.1.1:1440;
proxy_redirect off;
proxy_set_header Host $host;
}
}
Estou tentando obter solicitações como /dest?service=a_service_prod&id_number=12347016734696&slime=somethig
serem reescritas e a solicitação enviada para outro servidor comohttp://192.168.1.1:1440/dest?service=a_service_prod.sub_service&operation=sub_service&id_number=12347016734696&slime=somethig
Mas ao invés no destino, o que é recebido éhttp://192.168.1.1:1440/dest?service=a_service_prod&id_number=12347016734696&slime=somethig
Por favor, o que estou fazendo de errado e como posso corrigi-lo?
Seu método atual não funciona porque você está tentando capturar a string de consulta na expressão regular de uma
rewrite
diretiva.nginx
usa um URI normalizado para avaliaçãorewrite
elocation
diretivas, que não inclui o?
e tudo o que o segue.Você pode encontrar a string de consulta na
$request_uri
variável, a$args
variável - ou dividir entre as$arg_xxx
variáveis. Consulte este documento para obter detalhes.Você pode aplicar uma expressão regular a uma dessas variáveis usando uma
if
instrução ou umamap
diretiva.O exemplo abaixo usa uma
map
diretiva (consulte este documento para obter detalhes) com uma expressão regular e duas capturas nomeadas para reconstruir sua lista de argumentos necessária. O URI upstream é anexado àproxy_pass
diretiva (consulte este documento para obter detalhes).