Nginx перезаписывает расширение .jsp и прокси в tomcat

Входящий запрос

Как я могу создать правило перезаписи Nginx в блоке сервера appriopriate, которое принимает любой URL, который не заканчивается на .do и добавить расширение .jsp , а затем передать запрос на прокси-сервер (Tomcat)?

Исходящий запрос

Как я могу создать правило перезаписи Nginx в блоке сервера apprioate, который принимает любой URL-адрес, полученный от прокси-сервера (Tomcat), который заканчивается на .jsp , удалите расширение .jsp ,и отправить ответ клиенту?

Тест

Я попытался поиграть со следующим

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;
        }
}

Nginx удаляет расширение .jsp при получении запроса, но Nginx также отправляет запрос Tomcat без .jsp extension, поэтому tomcat не знает, что искать, и возвращает 404.

Я подтвердил вышесказанное, посмотрев на сервер Nginx и Tomcat. logs.

The problem

As far as i can tell, Nginx is not asking Tomcat do you have a $uri.jsp page but is instead asking if tomcat has a $uri page (without .jsp extension).

As far as i can read and understand, the try_files syntax is

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

But the official documentation does not say (as far as i can find) how to instruct Nginx to (in this case) ask the proxy for the different files and folders to try, but is instead quering its own local root location for $uri.jsp and than using @proxy as fallback.

2
задан 24 May 2018 в 21:04
1 ответ

Думаю, я знаю, что вам нужно:

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

Вместо return 302 лучше переписать запрос, применив нужное преобразование без перенаправления.

Таким образом вы сможете на один переход от браузера к серверу и обратно на один меньше.

0
ответ дан 3 December 2019 в 13:57

Теги

Похожие вопросы