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?

carlo.polisini
fonte

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.

Flup
fonte
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