@SergNF

Как написать правильный rewrite?

Есть несколько "неправильных веб страничек" во внутренней сети, которые корректно открываются при "прямом обращении" к сайтам, на которых они располагаются. Для доступа извне к ним использую nginx с location, внутри которого делаю rewrite.
Пример location

location /esp1/ {
rewrite ^/esp1/(.*)$ /$1 break;
proxy_pass http://esp1;
}

Пример страницы (исправить не могу, т.к. она "зашита" в некое устройство)

_div class="c"_
_a href="configmain"_Main_/a _
_a href="configall"_Hardware_/a_
_a href="configsrv"_Servers_/a_
_hr_
_a href="/debug"_Debug_/a_
_a href="/configrst"_Restart_/a_
_/div_

Обращение к страничке ....ru/esp1/
При переходе по ссылке configmain на страницу ...ru/esp1/configmain
При переходе по ссылке configrst, видимо из-за "/" ошибка и выкидывает в корень.
Логи
configmain

2018/02/06 16:59:27 [notice] 20908#20908: *1 "^/esp1(.*)$" matches "/esp1/configmain", client: 172.16.0.1, server: mediaserver, request: "GET /esp1/configmain HTTP/1.1", host: "192.168.1.16", referrer: "http://..................ru/esp1/"
2018/02/06 16:59:27 [notice] 20908#20908: *1 rewritten data: "/configmain", args: "", client: 172.16.0.1, server: mediaserver, request: "GET /esp1/configmain HTTP/1.1", host: "192.168.1.16", referrer: "http://..................ru/esp1/"

configrst

2018/02/06 16:59:35 [notice] 20908#20908: *1 "^/esp1(.*)$" matches "/esp1/", client: 172.16.0.1, server: mediaserver, request: "GET /esp1/ HTTP/1.1", host: "192.168.1.16"
2018/02/06 16:59:35 [notice] 20908#20908: *1 rewritten data: "/", args: "", client: 172.16.0.1, server: mediaserver, request: "GET /esp1/ HTTP/1.1", host: "192.168.1.16"
2018/02/06 16:59:37 [error] 20908#20908: *1 open() "/home/www/configrst" failed (2: No such file or directory), client: 172.16.0.1, server: mediaserver, request: "GET /configrst HTTP/1.1", host: "192.168.1.16", referrer: "http://..................ru/esp1/"


Повторюсь, что исправить станицу не могу и подобных "серверов" (href="/...") у меня много.
Причем единственная возможность доступа к ним - location. NGINX доступен извне по единственному адресу:порту, а сайтов внутри сети много.
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
ivankomolin
@ivankomolin
Я несколько раз прочитал и все равно не разобрался в вашем сумбурном рассказе.
Но то что вы хотите называется проксирование.

Давайте рассмотрим детали на примерах:
Есть ресурс test.com и у него есть картинка по адресу test.com/images/img.jpg

1. Есть ресурс test2.com, на котором мы хотели бы показать эту картинку по адресу test2.com/images/img.jpg
В настройках сервера test2.com пишем такой локейшн:
location /images/ {
	proxy_pass http://test.com;
}

2. Есть ресурс test2.com, на котором мы хотели бы показать эту картинку по адресу test2.com/pictures/img.jpg
В настройках сервера test2.com пишем такой локейшн:
location /pictures/ {
	rewrite /pictures/(.+) /images/$1 break;
	proxy_pass http://test.com;
}

Специально показал 2 примера, чтобы поняли для чего вам rewrite, а для чего proxy_pass
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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