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

Передача IP-адреса клиента через несколько прокси

У меня есть балансировщик нагрузки перед сервером Apache httpd, который, в свою очередь, находится перед сервером, на котором запущен Tomcat6. Мы используем Tomcat для запуска IdP Shibboleth. Следующее выглядит так:

Client -> Load Balancer -> Apache httpd server (mod_proxy_ajp) -> Tomcat server

Я хочу передать IP-адрес клиента серверу Tomcat. LB передает переменную ClientIP на сервер httpd, который я могу проанализировать в журнале httpd как "%{ClientIP}i", но это, очевидно, не попадает на сервер Tomcat, вместо этого Tomcat регистрирует IP-адрес LB.

Я пробовал использовать Tomcat RemoteIpValve как (в server.xml инсайдер <Engine>):

> <Valve className="org.apache.catalina.valves.RemoteIpValve"   
> remoteIpHeader="X-Forwarded-For"    protocolHeader="X-Forwarded-Proto"
> protocolHeaderHttpsValue="https" />

надеясь, что использование mod_proxy передаст IP в X-Forwarded-For безуспешно. Я видел сообщения на mod_rpaf, но я надеюсь сделать это без дополнительных модов apache httpd.

Думаю, я в паре частей от того, чтобы связать все это вместе, но застрял в колее. Любые идеи?

Если балансировщик нагрузки вставляет IP-адрес клиента в заголовок под названием ClientIP, mod_proxy должен передать его на сервер Tomcat без какой-либо специальной настройки. Попробуйте настроить Tomcat RemoteIpValve для поиска ClientIP вместо того X-Forwarded-For. например

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
       remoteIpHeader="ClientIP"
       protocolHeaderHttpsValue="https" />