Nginx переписать путь запроса с апстримами - PullRequest
0 голосов
/ 09 октября 2018

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

Так, например, у меня есть запрос к /ini/tial/path.Если запрос будет отправлен на upstream1, он должен быть преобразован в upstream1.nowhere:1111/u1/ini/tial/path, если запрос будет отправлен на upstream2, он должен быть преобразован в upstream2:2222/u2/ini/tial/path

Может ли это быть достигнуто в nginx?Я нашел похожий вопрос здесь , однако сначала он переписывает URL-адрес, а затем передает запрос на прокси, что заставляет его использовать один и тот же (переписанный) URL-адрес для всех вышестоящих серверов.В моем случае правило перезаписи зависит от фактического вышестоящего сервера.

1 Ответ

0 голосов
/ 10 октября 2018

Разные порты определенно не являются проблемой, но разница в пути кажется обломом.

Бэкэнды определены в Nginx как

upstream backend_name {
  server 1.1.1.1:1111;
  server 2.2.2.2:2222;
}

, а соответствующая директива прокси выглядит следующим образом: proxy_pass http://backend_name/path.Обратите внимание, что имя бэкэнда указывается по имени, а не как переменная.Обычно proxy_pass достаточно гибок и позволяет использовать переменные внутри, но нет способа определить, какой сервер выбран во время обработки запроса.(это возможно впоследствии, во время регистрации - $upstream_addr varaible)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...