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

Как правильно настроить прокси-сервер nginx, когда конечная точка находится в корневом контексте?

Я пытаюсь понять, как настроить обратный прокси в nginx, когда конечная точка находится в корневом контексте:

http://frontend.com/mylink прокси пересылает на http://10.0.0.2:8000/

К сожалению, я не могу изменить контекст приложения на http://10.0.0.2:8000, поэтому я пытаюсь найти обходной путь в nginx для этой проблемы. Следующая конфигурация обычно работает нормально при наличии контекста, но не работает в ситуации выше:

location /mylink {
    proxy_pass     http://10.0.0.2:8000;
    proxy_redirect http://10.0.0.2:8000 /mylink;
    port_in_redirect off;
}

Есть идеи, что мне здесь не хватает?

Поскольку ваше местоположение и proxy_pass не имеют косой черты, нормализованный URI не будет видеть /mylink часть вырезана правильно, и поведение по умолчанию proxy_redirect не добавляет ее. Просто используйте это:

location /mylink/ {
    proxy_pass http://10.0.0.2:8000/;
}

Думаю, если поменять на:

location /mylink {
   proxy_pass     http://10.0.0.2:8000/;
   proxy_redirect http://10.0.0.2:8000 /mylink;
   port_in_redirect off;
}

Обратите внимание на / на proxy_pass линия, это приводит к тому, что совпадающая часть вашего location не отправляться на сервер.

Для справки см. http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass:

Если директива proxy_pass указана с URI, то, когда запрос передается на сервер, часть нормализованного URI запроса, соответствующая местоположению, заменяется URI, указанным в директиве: