
Мы используем NGINX в качестве обратного прокси-сервера, он перенаправляет внешние вызовы нашим внутренним микросервисам Java:
Мы хотели бы добавить специальный сервис, который будет выполнять функцию "человека посередине", но только для части запроса. Его цель — декорировать исходный запрос (аутентификация, добавление/изменение заголовков HTTP, проверка прав доступа). "Декоративные задачи" включают в себя сложную бизнес-логику, которую нельзя настроить на самом NGINX.
Мы хотим, чтобы служба была вызвана первой, а затем переслала свой ответ (особенно заголовки HTTP!) как запрос к одному из микросервисов. Возможно также опционально вызывать отправленные службы с исходным телом, но с заголовками HTTP, возвращенными службой декоратора.
Когда служба возвращает ошибку HTTP, она должна вернуться непосредственно к вызывающей стороне без диспетчеризации.
Сервис реализован в виде приложения Java Spring Boot. Это обычный веб-сервис.
Можно ли настроить NGINX и как?
Чтобы было ясно: я не спрашиваю о том, как реализовать эту конкретную службу. Мне нужно только знать, можно ли (и как) настроить NGINX так, чтобы он вызывал другую службу перед отправкой вызова, и чтобы NGINX передавал заголовки (и, возможно, также тело, но не обязательно), возвращаемые этой службой, в вызов.
решение1
Да, это возможно.
Взгляни наэтотпример. Короче говоря, вы можете использоватьauth_requestдиректива для извлечения желаемых дополнительных заголовков. Используйтеproxy_set_headerдля добавления дополнительных заголовков к основному запросу.