LINUX.ORG.RU
ФорумAdmin

Nginx. Настройка редиректа

 ,


0

1

Добрый день! В nginx новичок, прошу помощи. Есть сервер №1. На нем работает веб java приложение по порту 7081 - http://192.168.1.1:7081

Есть сервер №2 смотрящий в мир, и на нем необходимо настроить доступ к приложению на сервере №1, но адрес должен быть с префиксом, например https://test.com/pref/

В Nginx на сервере №2 описал некую конфигурацию

location /pref/ {
      proxy_http_version 1.1;
      proxy_set_header Host              $http_host;
      proxy_set_header X-Real-IP         $remote_addr;
      proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_read_timeout                 900;

      proxy_set_header Connection "";
      proxy_buffers 32 4k;
      proxy_pass  http://192.168.1.1:7081/;
    }

Первая страница веб приложения открывается корректно. В самом приложении есть ссылка на другую страницу, и вот он на сервере №2 открывается без префикса, т.е. должно быть например https://test.com/pref/login? а получается https://test.com/login?

Можно ли в nginx решить эту проблему?


Ответ на: комментарий от kerneliq

понимаю, что вероятность решения этой пробуемы в nginx мизерная, но на всякий случай решил спросить. Может можно как-то задать условие, если вначале адреса нет префикса- делать подмену и добавлять его, например если https://test.com/login то заменить на https://test.com/pref/login

i_d
() автор топика
Ответ на: комментарий от kerneliq

Не работает :( Получаю ошибку «500 Internal Server Error» Может я не верно «вписал» rewrite?

location /pref/ {
      proxy_pass  http://192.168.1.1:7081/;
      rewrite ^/(.*)$ /pref/ last; 
    }
i_d
() автор топика

Ты не там ищешь. Приложение должно понимать, что оно расположено по адресу с /pref.

anonymous
()
Ответ на: комментарий от anonymous

Переключился на решение проблемы в приложении. Написал разработчикам. Они должны внести изменения в алгоритм формирования ссылки.

i_d
() автор топика

Можно переписывать контент в html, js, css и т.п. Ссылки в том числе. Тут подробно разобрано как это делать: https://serverfault.com/a/713322

З.Ы. Если ваши разрабы поменяют ссылки в приложении и при этом приложение будет ожидать запросы именно по этим ссылкам, то надо будет поменять
proxy_pass http://192.168.1.1:7081/;
на
proxy_pass http://192.168.1.1:7081;
или
proxy_pass http://192.168.1.1:7081/pref/

Потому что с указанием URI в конце proxy_pass, оно вырезает часть URI указанный в location из проксируемых запросов и заменяет его на прописанный в proxy_pass, а cейчас это /. Подробнее тут: http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass

chaos_dremel ★★
()
Последнее исправление: chaos_dremel (всего исправлений: 1)
Ответ на: комментарий от i_d
location /pref/ {
    proxy_pass  http://192.168.1.1:7081/;
}

location / {
    rewrite ^/ /pref/ last;
}

Ещё можно попытаться использовать sub_filter:

location /pref/ {
    proxy_pass http://192.168.1.1:7081/;
    gunzip on;
    sub_filter_types text/html;
    sub_filter_once off;
    sub_filter 'href="/' 'href="/pref/';
}

Но лучше всего найти настройку в приложении, чтобы оно знало про /pref/.

kmeaw ★★★
()

Друзья, спасибо за помощь. Нашел решение. Работает.

location /pref/ {
      rewrite ^/pref/?(.*)$ /$1 break;.
      proxy_pass  http://192.168.1.1:7081/;
    }
i_d
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.