Надеюсь, вы поможете мне с небольшой, но сложной проблемой с nginx:
Я хочу настроить динамический блок местоположения следующим образом:
location /test1/* {
proxy_pass destination.com/api/*;
proxy_buffering off;
}
Если URL-адрес .../test1/folder1
запрос должен быть передан destination.com/api/folder1
Я уже пробовал с переменной $request_uri
proxy_pass destination.com/api/$request_uri;
- у меня это не сработало.
РЕДАКТИРОВАТЬ: Сам сайт «/ test1 /» НЕ должен перенаправляться - только часть после «/ test1 /». Как такое возможно?
ОБНОВЛЕНИЕ 11.02.2016: Все еще нет решения :(
Спасибо за помощь / ответы!
Я нашел простое решение. 3 блока локаций:
location = / test1 / -> оставаться на месте
proxy_pass локальный восходящий поток $ request_uri;
перезаписать ^ (. *) localdomain;location = / test1 -> оставаться на месте
proxy_pass local-upstream $ request_uri;
перезаписать ^ (. *) localdomain;location / test1 / {
proxy_pass destination.com/api/;
}
Восходящий поток определяется в основном файле конфигурации:
upstream local-upstream {
IP-адрес сервера;
}
Вот и все.
Вы можете переписать URI перед передачей его серверу следующим образом:
location /test1/ {
proxy_set_header Host destination.com;
proxy_redirect http://destination.com/api/ http://$http_host/test1/;
rewrite ^/test1/(.*)$ /api/$1 break;
proxy_pass destination.com;
}
Надеюсь на эту помощь.
Обновить: Добавьте proxy_set_header, чтобы изменить Host на правильное доменное имя. Также добавьте proxy_redirect, чтобы при необходимости исправить Location в заголовке ответа.
Тебе не нужно *
в location
. И у вас должен быть протокол proxy_pass
. Это должно работать:
location /test1/ {
proxy_pass http://destination.com/api/;
proxy_buffering off;
}