У меня есть балансировщик нагрузки перед сервером 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" />