Рейтинг:1

Может ли NGINX вызвать другую службу перед отправкой

флаг us

Мы используем NGINX в качестве обратного прокси, он направляет вызовы извне на наши внутренние микросервисы Java:

введите описание изображения здесь

Мы хотели бы добавить специальный сервис, который выполнял бы роль «посредника», но только для части запроса. Его цель — украсить исходный запрос (аутентификация, добавление/изменение заголовков HTTP, проверка прав доступа). «Декоративные задачи» включают в себя сложную бизнес-логику, которую нельзя настроить на самом NGINX.

Мы хотим, чтобы служба вызывалась первой, а затем перенаправляла свой ответ (особенно заголовки HTTP!) как запрос одной из микрослужб. Возможно также опционально вызывать диспетчерские службы с исходным телом, но с заголовками HTTP, возвращаемыми из службы декоратора.

Когда служба возвращает ошибку HTTP, она должна возвращаться непосредственно вызывающему объекту без диспетчеризации.

Сервис реализован в виде приложения Java Spring Boot. Это обычный веб-сервис.

Можно ли настроить в NGINX и как?

Чтобы было ясно: я не спрашиваю о том, как реализовать эту конкретную услугу.Мне нужно только знать, можно ли (и как) настроить NGINX так, чтобы он вызывал другую службу перед отправкой вызова, и что NGINX передает заголовки (и, возможно, также тело, но не обязательно), возвращаемые этой службой, вызову.

введите описание изображения здесь

флаг in
Что можно использовать для реализации вашей бизнес-логики? Это диктует остальную часть установки.
флаг in
nginx можно значительно расширить с помощью скриптов. В документации есть примеры для авторизации, вы реально это пробовали?
флаг in
Здесь вы не получите никаких рекомендаций по продуктам, это не по теме.
Honza Zidek avatar
флаг us
@GeraldSchneider Я спрашиваю, как настроить NGINX для вызова другой веб-службы перед отправкой вызова, ** не для получения рекомендаций по продукту **. И нам проще написать бизнес-логику на Java, чем писать скрипты на NGINX. И последнее, но не менее важное: о любых изменениях в NGINX нам нужно обращаться к команде системных администраторов — мы предпочитаем быть гибкими и выполнять изменения самостоятельно. NGINX отвечает за многие другие вещи, не только за наши приложения. Операция включает в себя чтение из БД, кэширование данных и бизнес-правил, что выходит за рамки ответственности обратного прокси.
флаг in
Извините, тогда я неправильно понял ваш вопрос. Звучало так, будто вы искали сервис, реализующий логику. Затем вернемся к вопросу: пробовали ли вы [примеры из документации](https://github.com/nginx/njs-examples/)? Если у вас возникли проблемы с ними, вы должны добавить это к своему вопросу.
Honza Zidek avatar
флаг us
@GeraldSchneider Я отредактировал вопрос, чтобы избежать этого недоразумения :) Можете ли вы более подробно ориентироваться в примерах? Я не знаком с терминологией NGINX, и мне было бы полезно, если бы вы перенаправили меня непосредственно к части, связанной с моей проблемой. (Извините, если это звучит как лень, но я программист Java, и у меня нет амбиций стать системным администратором:))
Рейтинг:3
флаг it

Да, это возможно.

Взгляни на это пример. Короче говоря, вы можете использовать auth_request директива для получения желаемых дополнительных заголовков. Использовать proxy_set_header чтобы добавить дополнительные заголовки к основному запросу.

Paul avatar
флаг cn
Добро пожаловать в Server Fault! Ваш ответ предполагает, что работоспособное решение вопроса доступно на другом веб-сайте. Семейство веб-сайтов вопросов и ответов Stack Exchange [обычно не одобряет такой тип ответов] (https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers ). Пожалуйста, прочтите [Как мне написать хороший ответ?](http://serverfault.com/help/how-to-answer) и рассмотрите возможность пересмотра своего ответа, чтобы включить шаги, необходимые для решения проблемы. И не забудьте пройти [тур по сайту](http://serverfault.com/tour).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.