Como passar um pedido para um endereço IP diferente usando o Nginx

1
Eu sou relativamente novo no nginx e tentando fazer alguma coisa (e falhando até agora) que eu não sei se é algo que pode ser alcançado com o nginx. Meu nginx é configurado com SSL e quando o cliente faz uma chamada para ele, também estará passando um IP do servidor real onde a solicitação deve ser tratada e que enviará a resposta de volta.

O servidor upstream está em um servidor diferente, onde eu não sei o que vai ser o IP do mesmo .. daí a requisição passa o IP alvo e o IP alvo tem o servidor rodando na porta 80. o ip upstream faz não tem URI / gotoserver, é apenas para deixar nginx saber que tem que obter o parâmetro name e passar a chamada para o servidor apropriado.

#this is where nginix is running with SSL on
server 
 {
  server_name  myserver.com;
  listen 443;
ssl on;
ssl_certificate  pathtocert;
ssl_certificate_ke keypath ;
#I want nginix to route the call ip x.x.x.x 
# which is being passed as request parameter named 'name'
location  /gotoserver?name=x.x.x.x
{
  set dserver $arg_name
  proxy_pass http://dserver:80

}
}

Com a configuração acima, ele atinge o servidor, mas parece que está passando / gotoserver para o upstream e esse servidor não sabe sobre esse URI. Se eu codificar duro o IP no proxy_pass ele funciona

location /
 {
   proxy_pass http://X.X.X.X:80
 }

Aprecie todas as dicas de como fazer isso funcionar e peço desculpas se perdi alguns detalhes.

    
por Prakash 22.07.2018 / 16:17

1 resposta

1

O nginx corresponde apenas às diretivas $request_uri em location normalizadas. Portanto, ele não pode corresponder aos argumentos da consulta. Tente o seguinte:

location /gotoserver {
    proxy_pass $arg_name:80;
}

No entanto, essa abordagem não é ideal, já que não há validação no argumento name e muitos valores inválidos podem estar lá. Também pode haver implicações de segurança.

    
por 22.07.2018 / 18:13

Tags