Назад | Перейти на главную страницу

X-forwarded-for NULL в Tomcat

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

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

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

Спасибо

В нашем случае AJP используется между веб-серверами и серверами Tomcat. Обновление: я нашел этот ответ в документации 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 / host добавляется к созданным прокси-серверам, в противном случае ip / host объявляется удаленным ip, и цикл останавливается.
  • Если HTTP-заголовок запроса с именем $ protocolHeader (например, x-forwarded-for) равен значению параметра конфигурации protocolHeaderHttpsValue (по умолчанию https), то request.isSecure = true, request.scheme = https и request.serverPort = 443. Обратите внимание, что 443 можно перезаписать с помощью параметра конфигурации $ httpsServerPort.