Мы пытаемся определить, куда определенные запросы прибывают из нашего JAVA-приложения. Мы изменили файлы журнала для включения IP-адреса, и мы используем httpServletRequest.getRemoteAddr()
получить тот удаленный адрес.
При использовании xinetd для передачи внешних запросов на порте 443 к внутреннему порту наш сервер приложений слушает на (например, 8999), getRemoteAddr()
всегда возвраты 127.0.0.1. Если мы удаляем xinetd из стека, мы получаем корректный адрес.
Обратите внимание что X-Forwarded-For
заголовок не становится заполненным также.
Там какой-либо путь состоит в том, чтобы продолжить использовать xinetd для порта вперед без него снимающий IP-адрес просителя?
Наша установка:
service https
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
port = 443
protocol = tcp
redirect = localhost 8999
log_on_failure += USERID
}
Короткий ответ - нет.
Длинный ответ, ваше приложение java видит только сервер xinetd с localhost.
Это не может быть сделано одним xinetd. Используйте прокси-сервер, чтобы получить все возможности заголовков и т. Д.
По-видимому, та же проблема: tomcat6 за xinetd - реальный IP-адрес клиента
Ваш серверный стек может быть ошибочным или устаревшим. На моем сервере (3.19.0-41-generic 14.04.2-Ubuntu, xinetd 2.3.15 libwrap loadavg) xinetd делает пересылку необходимого заголовка без проблем. Я бы предложил обновить серверный стек. Вы можете получить xinetd версию с помощью
xinetd -version
Также проверьте, правильно ли вы настроили RemoveIpValve в Tomcat. Для такой конфигурации, как ваша, conf/server.xml должен содержать что-то вроде
<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpProxiesHeader="x-forwarded-by"
remoteIpHeader="x-forwarded-for"
internalProxies="127\.0\.0\.1"
protocolHeader="x-forwarded-proto" />