Nginx reescreve a extensão .jsp e proxy para tomcat

2

Solicitação de entrada

Como posso criar uma regra de reconfiguração Nginx no bloco de servidor apropriado, que usa qualquer URL, que não termina em .do e adiciona uma extensão .jsp , e que entrega a solicitação ao proxy (Tomcat)? servidor?

Solicitação de saída

Como posso criar uma regra de regravação Nginx no bloco de servidor apprioate, que recebe qualquer URL recebida do servidor proxy (Tomcat) que termina em .jsp , remove a extensão .jsp e envia a resposta ao cliente ?

Teste

Eu tentei brincar com o seguinte

server {
        listen 443 ssl;
        server_name www.test.local test.local;

        location / {
                if ($request_uri ~ ^/(.*)\.jsp$) {
                        return 302 /$1;
                }
                try_files $uri.jsp @proxy;
        }

        location @proxy {
                proxy_pass http://websites/;
                include proxy_params;
        }
}

O Nginx remove a extensão .jsp quando a solicitação é recebida, mas o Nginx também envia a solicitação ao Tomcat sem a extensão .jsp, portanto, o tomcat não sabe o que procurar e retorna um 404.

I have confirmed the above by looking at both Nginx and Tomcat server logs.

O problema

Até onde eu sei, o Nginx não está perguntando ao Tomcat você tem uma página $ uri.jsp mas está perguntando se o tomcat tem uma página $ uri (sem extensão .jsp ).

Tanto quanto eu posso ler e entender, a sintaxe try_files é

try_files [Location[file, folder]] [fallback[file, folder, HTTP code]]

Mas a documentação oficial não diz (até onde eu posso encontrar) como instruir o Nginx para (neste caso) pedir ao proxy para os diferentes arquivos e pastas para tentar , mas é ao invés disso consultando sua própria localização de raiz local para $ uri.jsp e usando @proxy como fallback.

    
por Cristian Matthias Ambæk 13.05.2018 / 18:48

1 resposta

0

Eu acho que sei o que você precisa:

location ^~ .jsp {
  rewrite /(.*).jsp /$1  break;
  proxy_pass         http://websites;
  proxy_redirect     off;
  proxy_set_header   Host $host;
}

Em vez de return 302 , é melhor você reescrever a solicitação aplicando a transformação necessária sem o redirecionamento.

Dessa forma, você tem menos uma viagem de ida e volta do navegador para o servidor e vice-versa.

    
por 29.05.2018 / 16:41