Необходимо получить удаленный IP-адрес того, кто обращается к веб-приложению.

Я пытаюсь зарегистрировать приложение посетителя веб-сайта в журналах tomcat. Я пытался добавить следующие строки кода в server.xml.

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%{X-Forwarded-For}i %h %F %l %u %t &quot;%r&quot; %s %b"/>

Я получаю следующий вывод в журнале tomcat.

  • 192.168.1.149 15 - - [24/июл/2020:16:24:16 +0200] GET /geonetwork/srv/eng/shib.user.login.noforward HTTP/1.0 200 50

Мне нужно получить удаленный IP того, кто обращается к приложению


person Mahendran K    schedule 24.07.2020    source источник
comment
пожалуйста, поделитесь своим server.xml   -  person Fahim Bagar    schedule 24.07.2020
comment
вы пытались проверить stackoverflow.com/questions/48103673/ ??   -  person Fahim Bagar    schedule 24.07.2020
comment
Да. Я пробовал по этой ссылке stackoverflow.com/questions/48103673/ @FahimBagar   -  person Mahendran K    schedule 24.07.2020
comment
какая у тебя версия кота?   -  person Fahim Bagar    schedule 24.07.2020
comment
версия кота 8.0.45   -  person Mahendran K    schedule 24.07.2020
comment
@MahendranK Пожалуйста, отредактируйте дополнительные детали вопроса. В комментариях почти нечитаемо.   -  person TripeHound    schedule 24.07.2020


Ответы (1)


Есть 2 сценария: ваш кот не находится за каким-либо балансировщиком нагрузки или прокси-сервером или за одним из них. Если ваш кот не находится за прокси или балансировщиком нагрузки, это уже правильно. Для большей предосторожности можно добавить %a, чтобы он мог получить удаленный IP-адрес, как указано в Access_Log_Valve

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%{X-Forwarded-For}i %h %F %l %u %t &quot;%r&quot; %s %b" />

To

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%{X-Forwarded-For}i %a %h %F %l %u %t &quot;%r&quot; %s %b" />

Если вы хотите использовать %h для имени удаленного хоста, установите enableLookups=true на соединителе.

<!-- Define a non-SSL HTTP/1.1 Connector on port 8180 -->
<Connector port="8080" 
....
    enableLookups="true"
      ....
/>

Но в любом случае, если кот находится за прокси или балансировщиком нагрузки, добавьте дополнительную конфигурацию, например:

<Valve className="org.apache.catalina.valves.RemoteIpValve" />

<Valve className="org.apache.catalina.valves.AccessLogValve" ....

IP-адреса прокси по умолчанию, используемые RemoteIpValve:

  • 127.0.0.0/8
  • 169.254.0.0/16
  • 10.0.0.0/8
  • 192.168.0.0/16

И, возможно, если вашего прокси здесь нет, добавьте конфигурацию внутренних прокси, чтобы поймать прокси:

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
  internalProxies="172.16.0.10|172.16.0.11" />
person Fahim Bagar    schedule 24.07.2020
comment
Я пробовал оба метода, я не получаю удаленный IP-адрес того, кто обращается к веб-приложению. - person Mahendran K; 27.07.2020