it-swarm.com.ru

Как зарегистрировать IP-адрес клиента и IP-адрес X-Forwarded-For в журнале доступа Tomcat

Как зарегистрировать IP-адрес клиента и IP-адрес X-Forwarded-For в журнале доступа Tomcat. 

Я использую% {X-Forwarded-For} i, и он регистрирует фактический адрес клиента, если я получаю доступ через балансировщик нагрузки. Но не регистрирует фактический адрес клиента, если я получаю прямой доступ к экземпляру Tomcat. Есть ли способ отобразить фактический IP-адрес клиента в обоих случаях?

3
Kishore Tamire

От http://www.techstacks.com/howto/configure-access-logging-in-Tomcat.html :

Если вы работаете с версией Tomcat выше 6.0.21 или Tomcat 7, вы можете воспользоваться новым удаленным IP-клапаном. Для регистрации доступа, хорошо в этом Valve является то, что он заменит IP-адрес клиента IP-адресом, переданным с заголовком X-Forwarded-For - автоматически - если IP-адрес передан в заголовке X-Forwarded-For. Загрузка это довольно легко. Просто добавьте org.Apache.catalina.valves.RemoteIpValve в ваш server.xml до объявления AccessLogValve. Например:

 <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

  <!-- Remote IP Valve -->
    <Valve className="org.Apache.catalina.valves.RemoteIpValve" />

  <!-- Access log processes all example.
    Documentation at: /docs/config/Valve.html -->

  <Valve className="org.Apache.catalina.valves.AccessLogValve" directory="logs" 
    prefix="localhost_access_log." suffix=".txt"
    pattern="combined" resolveHosts="false"/>
  -->
</Host>

Если вы используете версию Tomcat 6 старше 6.0.21 и хотите вместо этого сохранить IP-адрес X-Forwarded-For, вы можете изменить свойство pattern вашего AccessLogValve. Вам нужно будет удалить «общий» или «комбинированный» шаблон и заменить его одним из следующих шаблонов:

Common Log Format: %{X-Forwarded-For}i %l %u %t "%r" %s %b
Combined Log Format: %{X-Forwarded-For}i %l %u %t %r %s %b %{User-Agent}i %{Referer}i

Главная проблема, над которой позаботится RemoteIP Valve, заключается в том, что вы получите только адрес X-Forwarded-For в журналах. Если вы напрямую подключитесь к серверу приложений, минуя устройство, которое вставляет в запрос заголовок X-Forwarded-For, вы не получите зарегистрированный IP-адрес. Вы по-прежнему будете регистрировать запрос - вы просто не будете знать, откуда он поступил.

3
mikep
<Valve className="org.Apache.catalina.valves.RemoteIpValve"
       remoteIpHeader="x-forwarded-for" />

<Valve className="org.Apache.catalina.valves.AccessLogValve"
    requestAttributesEnabled="true"
     pattern="Remote Ip is: %{org.Apache.Tomcat.remoteAddr}r" />

Вы можете добавить эти два определения Valve в context.xml. Таким образом, вы можете увидеть удаленный IP в обоих случаях. Через балансировщик нагрузки или прямой.

org.Apache.catalina.valves.RemoteIpValve обнаруживает заголовок «x-forwarded-for». Если в заголовке есть «x-forwarded-for», его значение помещается в атрибут запроса «org.Apache.Tomcat.remoteAddr». Если в заголовке нет «x-forwarded-for», клиент ip addr помещается в атрибут запроса «org.Apache.Tomcat.remoteAddr».

Конфигурация AccessLogValve просто регистрирует атрибут запроса «org.Apache.Tomcat.remoteAddr», который содержит правильный удаленный IP-адрес.

0
Mehmet Sunkur