X-forwarded-for NULL в Tomcat

Мы внедряем заголовок x-forwarded-for в loadbalancer, который отправляет запрос на веб-сервер apache, который передает proxys (mod_proxy_balancer) запрос на внутренний сервер Tomcat. мы видим IP-адрес клиента в заголовке 'x-forwarded-for' на apache, но мы получаем '-' в журналах доступа Tomcat.

мы добавили IP-адрес балансировщика нагрузки в список внутренних прокси на Tomcat.

из ] https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html похоже, что для безопасных соединений (запросы, поступающие от внутренних прокси) перенаправленные -for становится NULL и клиентский IP назначается удаленному адресу. это верно? есть ли способ сохранить IP-адрес клиента в заголовке x-forwarded-for на tomcat при использовании внутренней настройки прокси?

Спасибо

1
задан 31 January 2017 в 21:37
1 ответ

В нашем случае между веб-серверами и серверами Tomcat используется AJP. Обновление: я нашел этот ответ в документации Tomcat https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html , вот что Я думаю происходит. В частности:

Если входящий request.getRemoteAddr () соответствует списку внутренних прокси-серверов клапана:

  • Цикл по разделенному запятыми списку IP-адресов и имен хостов, переданных предыдущим балансировщиком нагрузки или прокси-сервером в заголовке Http данного запроса с именем $ remoteIpHeader (значение по умолчанию x-forwarded-for). Значения обрабатываются справа налево. Для каждого IP / хоста в списке:
  • , если он соответствует списку внутренних прокси, IP / хост будет проглочен
  • , если он соответствует списку доверенных прокси, IP / хост добавляется к созданным прокси-серверам в противном случае, ip / host объявляется удаленным IP-адресом, и цикл прекращается.
  • Если HTTP-заголовок запроса с именем $ protocolHeader (например, x-forwarded-for) равен значению параметра конфигурации protocolHeaderHttpsValue (по умолчанию https), тогда request.isSecure = true, request.scheme = https и request.serverPort = 443. Обратите внимание, что 443 можно перезаписать с помощью параметра конфигурации $ httpsServerPort.
-1
ответ дан 4 December 2019 в 10:52

Теги

Похожие вопросы