У меня есть настройка среды микросервисов на основе Spring Boot с этой конфигурацией -
- nginx в качестве балансировщика нагрузки на centos 7. (настроен на использование x-forwarded-for)
- Шлюз API с Spring boot на базе прокси-сервера netflix zuul. Tomcat - это встроенный контейнер.
- Микросервис продуктов на основе Spring Cloud. Tomcat как встроенный контейнер.
Версия Spring Boot: 1.5.6
Когда конечный пользователь обращается к микросервису продуктов, он проходит через Nginx -> шлюз Api -> Сервис продуктов.
Теперь проблема возникает, когда я хочу получить IP-адрес удаленного клиента в продуктах Microservice. Я всегда получаю 127.0.0.1 в качестве IP-адреса. Вот код в микросервисе продуктов, который извлекает IP-адрес клиента.
private String getClientIP() {
String xfHeader = request.getRemoteAddr();
if (StringUtils.isBlank(xfHeader) || xfHeader.equals("127.0.0.1")) {
return request.getHeader("X-Forwarded-For");
}
return xfHeader.split(",")[0];
}
API-шлюз application.properties настроен на использование server.use-forward-headers: true
P.S. Когда я пытаюсь переключиться с tomcat на undertow в моем API-шлюзе, я начинаю получать реальный IP-адрес клиента в микросервисе продуктов. Итак, проблема кроется где-то в моей конфигурации Tomcat в API-шлюзе.