nginx proxy_pass с новым URI не работает, если хост доступен - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь использовать переменную для установки имени хоста в proxy_pass, но как только я пытаюсь это сделать, путь после местоположения игнорируется.

Если я пытаюсь получить localhost: 8001 / dirA/x/y/z.html.Следующее возвращает файл из http://server1:8888/dirB/dirC/x/y/z.html. Это то, что я ожидаю, произойдет.

        location ^~ /dirA/ {
            proxy_pass http://server1:8888/dirB/dirC/;

Но если я попробую следующий конфиг, который просто использует переменную для имени хоста ... и попробуюget localhost: 8001 / dirA / x / y / z.html

        location ^~ /dirA/ {
            set $endpoint server1;
            proxy_pass http://$endpoint:8888/dirB/dirC/;

Вместо этого я получаю http://server1:8888/dirB/dirC/index.html.

1 Ответ

0 голосов
/ 26 января 2019

Вот так proxy_pass работает.Если вы используете переменную в значении, вам нужно предоставить весь URI.Подробнее см. в этом документе ;

Вы можете использовать регулярное выражение location.Например:

location ~ ^/dirA/(.*)$ {
    set $endpoint server1;
    proxy_pass http://$endpoint:8888/dirB/dirC/$1;
}

Обратите внимание, что порядок расположения регулярных выражений является значительным.Подробнее см. в этом документе .


Кроме того, rewrite...break также должен работать.

location ^~ /dirA/ {
    set $endpoint server1;
    rewrite ^/dirA/(.*)$ /dirB/dirC/$1 break;
    proxy_pass http://$endpoint:8888;
}
...