Обработка X-FORWARDED-PROTO в Java Apache-Tomcat

Может ли кто-нибудь помочь мне в работе с X-FORWARDED-PROTO в Java apache-tomcat.

Настройка приложения такова, что tomcat общается с веб-сервером apache, который, в свою очередь, общается с Cisco LoadBalancer, и, наконец, балансировщик публикует страницы для клиента (tomcat -> apache2 -> load balancer -> client ).

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

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

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

12 голосов | спросил Manoj 21 AMpThu, 21 Apr 2011 11:58:57 +040058Thursday 2011, 11:58:57

2 ответа


0

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

Вы можете использовать класс 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». По соображениям безопасности я бы рекомендовал установить его, даже если он работает со значениями по умолчанию.

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

ответил Allan 10 J000000Sunday11 2011, 23:10:25
0

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

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

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

ответил hernangarcia 22 Maypm11 2011, 20:42:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132