Перенаправить Tomcat (как Spring tcServer) на другой порт - PullRequest
1 голос
/ 16 сентября 2011

Я бы хотел сделать что-то похожее на перенаправление SSL, но немного по-другому.

У меня есть балансировщик нагрузки, настроенный на прослушивание через порт 80 (HTTP) и 443 (HTTPS).

Балансировщик нагрузки не имеет возможности перенаправлять SSL, потому что если бы это было так, моя жизнь была бы слишком простой (это Amazon Elastic Load Balancer, кстати).

У меня есть Tomcat (tcServer), который прослушивает два порта: 80 и 81 (оба HTTP).

Порт 80 на LB приведет вас к порту 80 на tomcat. Порт 443 на LB приведет вас к порту 81 на Tomcat (то же веб-приложение).

Я хотел бы, чтобы порт 80 на tomcat отправлял вас обратно на 443 на балансировщике нагрузки.

И все, не касаясь развернутого веб-приложения.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

Так что, очевидно, я обдумал это (ну, я был немного склонен думать об этом, основываясь на некоторых форумах, которые я читал). В любом случае, вот что сработало (и работает - мы в производстве).

  1. Получите фильтр URLRewrite от Tuckey и сначала добавьте его в свой web.xml в / *
  2. Добавьте urlrewrite.xml в / WEB-INF / и установите конфигурацию по умолчанию.
  3. Hit / rewrite-status вашего приложения (с локального хоста), чтобы убедиться, что оно работает правильно.
  4. Создайте правило, которое будет искать заголовок Amazon X-Forwarded-Proto и быть уверенным, что его значение равно "HTTPS"; если нет, перешлите его обратно на https: //....

И все готово. Конечный конфиг выглядит так:

/ WEB-INF / web.xml

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

/ WEB-INF / urlrewrite.xml

<rule match-type="regex">
    <condition type="header" operator="notequal" name="X-Forwarded-Proto">^HTTPS$</condition>
    <from>^.*$</from>
    <to type="permanent-redirect" last="true">https://%{server-name}%{request-uri}</to>
</rule>

Для этого вам нужен только tomcat, работающий на одном порту. У вас есть два варианта включения URLRewrite.

  1. Вы можете включить urlrewrite.xml непосредственно в вашу WAR, и он будет работать автоматически. В этом случае вам нужно будет добавить правило, чтобы отключить его для вашей среды разработки (вы можете добавить дополнительное условие для port = "80" для включения перезаписи только при прослушивании на порту 80, который является рабочим, в то время как разработка, вероятно, будет на 8080).
  2. Вы можете добавить URLRewrite в директорию lib Tomcat и добавить фильтр в основной файл web.xml для Tomcat. Преимущество заключается в том, что вам не нужно изменять свое приложение, чтобы сделать это.
0 голосов
/ 17 сентября 2011

Один обходной путь: создайте простой веб-проект, который не содержит никаких страниц, просто простую страницу с ошибкой для 404 ошибок, которая перенаправляет каждый запрос на абсолютный URL-адрес вашего балансировщика нагрузки (со ссылкой https: //).Затем настройте Tomcat на использование этого приложения на порту 80 (т. Е. Развертывание как ROOT.war) и обслуживание исходного приложения на порту 81.

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