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

Переадресация порта xinetd заставляет HttpServletRequest.getRemoteAddr () всегда возвращать 127.0.0.1

Мы пытаемся определить, откуда поступают конкретные запросы внутри нашего 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" />