Nginx: proxy_pass dynamic from location

Надеюсь, вы поможете мне с небольшой, но сложной проблемой nginx:

Я хочу настроить динамический блок местоположения следующим образом:

location /test1/* {  
    proxy_pass destination.com/api/*;  
    proxy_buffering off;  
}  

Если URL-адрес ... / test1 / folder1 запрос должен быть передан в пункт назначения. Сам сайт «/ test1 /» НЕ должен перенаправляться - только часть после «/ test1 /». Как это возможно?

ОБНОВЛЕНИЕ 11.02.2016: Все еще нет решения: (

Спасибо за вашу помощь / ответы!

0
задан 11 February 2016 в 12:59
3 ответа

Я нашел простое решение. 3 блока местоположения:

location = / test1 / -> оставаться на месте
proxy_pass локальный восходящий поток $ request_uri;
перезаписать ^ (. *) localdomain;

location = / test1 -> оставаться локальным
proxy_pass локальный восходящий поток $ request_uri;
перезаписать ^ (. *) localdomain;

location / test1 / {
proxy_pass destination.com/api/;
}

Восходящий поток определяется в основном файле конфигурации:

восходящий локальный-восходящий поток {
IP-адрес сервера;
}

Вот и все.

0
ответ дан 5 December 2019 в 10:43

Вам не нужно * в месте . И у вас должен быть протокол в proxy_pass. Это должно сработать:

location /test1/ {  
    proxy_pass http://destination.com/api/;
    proxy_buffering off;
}  
0
ответ дан 5 December 2019 в 10:43

Вы можете переписать 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 в заголовке ответа.

0
ответ дан 5 December 2019 в 10:43

Теги

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