Назад | Перейти на главную страницу

Nginx: proxy_pass динамический из местоположения

Надеюсь, вы поможете мне с небольшой, но сложной проблемой с 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;
}