Передача 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" />