Redirecionar um subcaminho para um host externo com o Nginx


13

Preciso criar um mapa bastante simples no Nginx redirecionando um subcaminho para outro servidor localizado na mesma sub-rede.

  • Servidor Nginx: 192.168.0.2
  • Servidor Tomcat: 192.168.0.3:8443

Eu tentei colocar isso na seção do servidor

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }

mas tudo o que tenho acesso http://www.myservice.com/tomcatapi/ é uma página de erro 500 e, no arquivo de log nginx, tenho este erro:

    the rewritten URI has a zero length

O que estou perdendo neste conf?

Respostas:


12

Vejamos sua linha de reescrita:

rewrite /tomcatapi/(.*) $1 break;

Você está pegando o bit entre parênteses (ou seja, tudo depois /tomcatapi/), que é atribuído a $1, e usando isso como o único conteúdo do seu URI reescrito.

No seu exemplo, não há nada depois /tomcatapi/, então a reescrita acaba vazia, e é sobre isso que o nginx está gemendo.

Se você alterar a regra de reescrita para

rewrite /tomcatapi/(.*) /$1 break;

você sempre terminará com pelo menos /a saída de reescrita.


Obrigado pela resposta, de qualquer maneira eu adicionei o "/", mas agora, ao acessar o URL, o navegador está preso no estado de carregamento e no arquivo de log, vejo agora um erro diferente: o upstream não enviou nenhum cabeçalho HTTP / 1.0 válido ao ler o cabeçalho de resposta do upstream
Carlo.polisini

O que dizem os logs no seu servidor tomcat?
Flup

Eu encontrei o erro, o erro foi que o aplicativo estava disponível apenas em https e não em http! Portanto, a sintaxe ficou logo após a correção, substituindo http por https para fazê-lo funcionar.
Carlo.polisini
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.