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

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

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

Я пытаюсь передать IP-адрес клиента серверу Tomcat. LB передает переменную ClientIP к серверу httpd, который я могу разобрать в LogFormat 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.

Я думаю, что я на пару частей не связал все это вместе, но застрял в колее. Есть идеи?

1 ответ

Решение

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

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
       remoteIpHeader="ClientIP"
       protocolHeaderHttpsValue="https" />
Другие вопросы по тегам