Как зарегистрировать x-forwarded-by от nginx в spring -boot / tomcat (IPv4 / IPv6)

Как мне зарегистрировать реальный IP-адрес клиента из nginx в tomcat / spring-boot через CommonsRequestLoggingFilter как для IPv4, так и для IPv6?

У меня есть установка nginx для обратного прокси-сервера Tomcat (через spring -boot), и у меня был ограниченный успех с опцией Spring-boot server.use-forward-headers: true. Работает с IPv4-адресами; однако он по-прежнему регистрирует 0: 0: 0: 0: 0: 0: 0: 1 (nginx) для адресов IPv6. Это проблема, потому что по умолчанию nginx и tomcat связываются как с адресами IPv4, так и с IPv6, поэтому nginx будет перенаправлять запросы tomcat по одному или другому случайным образом.

Примеры операторов ведения журнала:

Before request [uri=/membershiprequest;client=128.250.87.102;user=admin]
Before request [uri=/activity;client=0:0:0:0:0:0:0:1;user=admin]

В идеале оба должны сказать:

Before request [uri=/membershiprequest;client=128.250.87.102;user=admin]
Before request [uri=/activity;client=128.250.87.102;user=admin]

В обоих случаях nginx включает заголовок x-forwarded-by:

IPv4

18:43:14.816532 IP 127.0.0.1.56540 > 127.0.0.1.8180:
........GET /activity HTTP/1.0
Host: test.local.org
X-Real-IP: 128.250.87.102
X-Forwarded-For: 128.250.87.102
X-Forwarded-Proto: https

IPv6

18:43:14.817830 IP6 ::1.37684 > ::1.8180: 
........GET /membershiprequest HTTP/1.0
Host: test.local.org
X-Real-IP: 128.250.87.102
X-Forwarded-For: 128.250.87.102
X-Forwarded-Proto: https

Когда загрузка использует поиск кода, она должна делать нечто подобное: переносить заголовки из конца в конец. Возможно, вы сможете найти там решение.

Marged 09.06.2018 10:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
894
0

Другие вопросы по теме