Я хотел бы знать, можно ли настроить Nginx для динамической отправки запроса (без завершения SSL) на данный микросервис?
В моей архитектуре есть два микросервиса. Предположим, что это localhost: 5000 и localhost: 5100. Я хотел бы отправить все запросы (которые поступают на прокси Nginx), которые начинаются с /api
на localhost: 5000 и /services
на localhost: 5100. Я настроил SSL на обоих микросервисах, поэтому мне не нужно завершение SSL на Nginx.
Это возможно?
То, что вы просите сделать, невозможно. Это не ограничение Nginx, это скорее следствие того, как работает SSL.
Передача соединения через балансировщик нагрузки без прерывания SSL требует, чтобы балансировщик нагрузки выбрал бэкэнд, прежде чем он сможет пересылать сообщение ServerHello с сервера обратно клиенту. Однако на этом раннем этапе клиент еще не отправил URI, поэтому его нельзя использовать при выборе серверной части.
У вас есть следующие альтернативы:
Если у вас есть жесткое требование к URL-адресам для использования определенного домена и отсутствие номера порта в URL-адресах, большинство этих параметров будет исключено, и отключение SSL на балансировщике нагрузки будет вашим единственным вариантом.
Причина, по которой я различаю использование двух разных IP-адресов и двух разных доменных имен, заключается в том, что два доменных имени, указывающих на один и тот же IP-адрес, возможны, но только до тех пор, пока клиенты поддерживают SNI. (В этом сценарии вы можете заставить работать только один из доменов для клиентов без SNI).
Нет, не совсем так, как вы сказали, что хотите, чтобы это работало. Однако есть способы сделать это.
Nginx умеет Балансировка нагрузки TCP, без проблем. Это позволяет передавать соединения без прерывания SSL / TLS. Однако на этом уровне сетевого стека (уровень 4, транспорт) нет сведений об URI. Вы не можете использовать URL-адреса для балансировки TCP-соединений, вам понадобится Nginx, прослушивающий разные порты. Это может быть для вас достаточно хорошим решением.
Лучший способ сделать это, если он подходит вашему приложению, - это перейти с уровня 4 на уровень 7. Nginx может завершить SSL / TLS на балансировщике нагрузки, а затем позволить Nginx вызывать микросервисы. Вызовы микросервисов могут быть http или https. Есть гид здесь.