Обработка заголовка X-FORWARDED-PROTO в веб-приложении Java - PullRequest
14 голосов
/ 21 апреля 2011

Может ли кто-нибудь помочь мне в работе с заголовком X-FORWARDED-PROTO в веб-приложении Java, развернутом в Apache Tomcat.

Настройка приложения такова, что tomcat общается с нимВеб-сервер Apache, который, в свою очередь, взаимодействует с Cisco Load Balancer, наконец, балансировщик публикует страницы для клиента (tomcat -> apache2 -> балансировщик нагрузки -> клиент).

Сертификат SSL установлен в Load Balancer ион обрабатывает запросы HTTPS.Мое требование - заставить приложение вести себя так, чтобы оно использовало X-FORWARDED-PROTO и изменить страницы как HTTP или HTTPS.

Проверка файлов заголовков моих веб-страницЯ не смог найти заголовок X-FORWARDED-PROTO .У меня также нет доступа к конфигурации Load Balancer, и ИТ-отдел предложил нам использовать X-FORWARDED-PROTO , чтобы различать запросы HTTP и HTTPS.

Есть ли какие-либовыполнить настройку на уровне Tomcat или Apache, чтобы он возвращал заголовок X-FORWARDED-PROTO ?Или это то, что конфигурация должна обрабатываться в Load Balancer?

Ответы [ 2 ]

25 голосов
/ 10 июля 2011

Я почти уверен, что вы уже все выяснили, но я все же добавлю ответ.

Вы можете использовать класс org.apache.catalina.valves.RemoteIpValve в теге движка в conf / server.xml tomcat.

    <Valve className="org.apache.catalina.valves.RemoteIpValve"
           internalProxies="192.168.1.XXX"
           remoteIpHeader="x-forwarded-for"
           remoteIpProxiesHeader="x-forwarded-by"
           protocolHeader="x-forwarded-proto"
    />

Важно отметить, что очень важно установить значение internalProxies . Если это не установлено, и вы используете нестандартную настройку сети, это может вызвать некоторые проблемы, при которых tomcat не будет проверять заголовки x-forwarded и по умолчанию будет иметь значение «http». По соображениям безопасности я бы рекомендовал установить его, даже если он работает со значениями по умолчанию.

Смотрите здесь для получения дополнительной информации.

0 голосов
/ 22 мая 2011

Добавьте это к вашему Apache vhost, управляющему соединениями

<VirtualHost *:80>
  ...
  RewriteEngine On
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>

это предполагает, что ваша проверка работоспособности / статус, которая не требует https

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...