Как мне зарегистрировать реальный IP-адрес клиента из nginx в tomcat / spring-boot через CommonsRequestLoggingFilter для IPv4 и IPv6?
У меня есть настройка nginx для обратного прокси-сервера Tomcat (через spring-boot), и яимели ограниченный успех с опцией server.use-forward-headers: true
у Spring-boot.Работает с 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