Faça o redirecionamento de proxy reverso nginx 302 para uma subpasta de URI em vez de raiz

6

Eu tenho um servidor da web na minha LAN com o URL https://10.0.0.22 e estou tentando acessá-lo da Internet por meio de um proxy reverso nginx com uma URL como https://domain.com/my/web/app .

A dificuldade que estou tendo é que o servidor local envia um redirecionamento 302 para /login.php , que nginx então passa de volta para o navegador do cliente externo para se tornar https://domain.com/login.php em vez de https://domain.com/my/web/app/login.php . Isso resulta em um erro 404 porque não há nada em https://domain.com/login.php .

Eu tentei muitas opções diferentes com pouco sucesso, incluindo uma ampla gama de diretivas rewrite , proxy_redirect e proxy_buffering , mas isso é o mais perto que posso obtê-lo:

    location ^~ /my/web/app/
    {
            proxy_buffering   off;
            rewrite           /my/web/app/(.*) /$1 break;
            proxy_pass        https://10.0.0.22/;
    }

Existe uma maneira de configurar o nginx para que o redirecionamento 302 do servidor web interno para /login.php se manifeste externamente como /my/web/app/login.php ?

    
por Steve HHH 18.12.2013 / 01:59

1 resposta

6

Após investigação e teste contínuos de diferentes combinações e ordenação de diretivas, adicionando proxy_redirect após a diretiva proxy_pass parece corrigir o problema de tradução do URI:

 proxy_redirect https://10.0.0.22/ https://domain.com/my/web/app/;

Depois de mais alguns ajustes, parece que definir proxy_redirect to default faz a mesma coisa implicitamente:

 proxy_redirect default;

O bloco completo de localização ficou assim:

location ^~ /my/web/app/
{
        proxy_buffering   off;
        rewrite           /my/web/app/(.*) /$1 break;
        proxy_pass        https://10.0.0.22/;
        #proxy_redirect    https://10.0.0.22/ https://domain.com/my/web/app/;
        proxy_redirect    default;
}

As imagens ainda estavam quebradas, no entanto, porque apontam para /images no servidor local. Não tenho certeza de como obter o nginx para traduzi-los (porque estão incorporados no corpo do HTML), mas, para resolver o problema por enquanto, consegui adicionar um bloco location dedicado a /images antes do bloco de localização para /my/web/app , assim:

    location ^~ /images/
    {
            proxy_pass https://10.0.0.22/images/;
            proxy_redirect default;
    } 
    
por 19.12.2013 / 06:54