2011-09-16 10 views
1

私はSSLリダイレクトと似たようなことをしたいと思いますが、少し異なります。別のポートにTomcat(Spring tcServerとして)をリダイレクト

ポート80(HTTP)とポート443(HTTPS)でリッスンするように構成されたロードバランサがあります。

ロードバランサにはSSLリダイレクト機能がありません。私の人生が簡単すぎると、AmazonのElastic Load Balancer(btw)です。

私はTomcat(tcServer)が2つのポート、80と81(どちらもHTTP)でリッスンしています。

LBのポート80は、tomcatのポート80に移動します。 LBのポート443は、tomcat(同じWebアプリケーション)のポート81に移動します。

私が望むのは、Tomcatのポート80をロードバランサの443に戻すことです。

デプロイされたwebappに触れることなくすべて。

アイデア?

答えて

0

回避策:ページを含まない単純なWebプロジェクトを作成します。すべてのリクエストを(https://リンクを使用して)ロードバランサの絶対URLにリダイレクトする404エラーの単純なエラーページです。次に、ポート80でこのアプリケーションを使用するようにTomcatを設定します(つまり、ROOT.warとしてデプロイしてください)。

+0

時間は十分ではないと思っていました...私は次の – les2

0

これは私がこれを考え過ぎたことを明らかにしています私が読んでいたいくつかのフォーラムに基づいて)。いずれにしても、ここではうまくいっています(そして現在は生産中です)。

  1. GoはTuckeyのURLRewriteフィルタを取得し、/ WEB-INFにurlrewrite.xmlを追加/、デフォルトの設定で入れ/ *
  2. であなたのweb.xmlで最初にそれを追加します。
  3. アプリケーションが正常に動作していることを確認するために、(localhostからの)アプリケーションのヒット/書き換えステータス。
  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のみ、このための1つのポート上で実行する必要があります。 URLRewriteを有効にする方法には2つの選択肢があります。

  1. あなたのWARに直接urlrewrite.xmlを含めることができ、それは自動的に動作します。この場合、開発環境用にルールを無効にするルールを追加する必要があります(ポート80でプロンプトを追加することができます)。 8080)。
  2. TomcatのlibディレクトリにURLRewriteを追加し、Tomcatのメインweb.xmlにフィルタを追加できます。利点は、アプリケーションを変更する必要がないことです。
関連する問題