1

SSLリダイレクトと似たようなことをしたいのですが、少し異なります。

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

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

Tomcat (tcServer) が 80 と 81 (両方とも HTTP) の 2 つのポートでリッスンしています。

LB のポート 80 は、Tomcat のポート 80 に接続します。LB のポート 443 は、Tomcat のポート 81 に接続します (同じ Web アプリ)。

私が望むのは、Tomcat のポート 80 からロード バランサーの 443 に送り返されるようにすることです。

そして、デプロイされた Web アプリケーションに触れることはありません。

何か案は?

4

2 に答える 2

0

どうやら私はこれを考えすぎていたようです (まあ、私が読んでいたいくつかのフォーラムに基づいて、それを考えすぎたのです)。いずれにせよ、これが機能したものです(そして機能しています-私たちは生産中です)。

  1. Tuckey の URLRewrite フィルターを取得し、最初に web.xml の /* に追加します。
  2. urlrewrite.xml を /WEB-INF/ に追加し、デフォルト構成にします。
  3. アプリケーションで (localhost から) /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>

これには、1 つのポートで実行されている tomcat だけが必要です。URLRewrite を有効にする方法には 2 つの選択肢があります。

  1. urlrewrite.xml を WAR に直接含めることができ、自動的に機能します。その場合、開発環境でそれを無効にするルールを追加する必要があります (port="80" に追加の条件を追加して、運用環境であるポート 80 でリッスンしている場合にのみ書き換えを有効にすることができますが、開発環境ではおそらく8080 で)。
  2. URLRewrite を Tomcat lib ディレクトリに追加し、フィルタを Tomcat のメイン web.xml に追加できます。利点は、それを行うためにアプリケーションを変更する必要がないことです。
于 2011-09-18T04:12:33.490 に答える
0

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

于 2011-09-16T21:35:14.817 に答える