The Ja-Jakarta ProjectTomcat Servlet/JSP コンテナ

リンク

ユーザガイド

リファレンス

Tomcat開発

Tomcat5 サーブレット/JSP コンテナ

Proxy Support HOW-TO

Printer Friendly Version
印刷用
バージョン
はじめに

Tomcat の標準設定を使用している場合、Web アプリケーションでは、 リクエストの宛先のサーバ名とポート番号が必要なことがあります。 Tomcat を Coyote HTTP/1.1 Connector で動かしている時には、Tomcat は通常、リクエストで指定されたサーバ名と Connector がリッスンしているポート番号を報告します。 この目的で使えるサーブレット API 呼び出しとしては以下の2つがあります。

  • ServletRequest.getServerName()
  • ServletRequest.getServerPort()

プロキシサーバ (またはプロキシサーバのように動作するように設定してある Web サーバ) の後ろで実行している場合、 こうした呼び出しの返り値を管理したいこともあります。 特にポート番号については、通常はConnector 自身がリッスンしているポート番号ではなく、 元のリクエストで指定されたポート番号が欲しいでしょう。 こうした値を設定するのに <Connector> 要素の proxyName 属性と proxyPort 属性が使用できます。

プロキシのサポートとしては様々な形態があります。 以下のセクションではいくつかの一般的なケースでのプロキシ設定を説明します。

Apache 1.3 プロキシのサポート

Apache 1.3 は、 Web サーバをプロキシサーバとして動作させるように設定するオプションモジュール (mod_proxy) をサポートしています。これを使うと、 mod_jk などの Web コネクタを設定しなくても、特定の Web アプリケーションへのリクエストを Tomcat 5のインスタンスにフォワードできます。 そのためには以下の手順を行なう必要があります。

  1. mod_proxy モジュールを組み込むように Apache を設定します。 ソースからビルドする場合は、./configure のコマンドラインで --enable-module=proxy 指示子をつけるのが一番簡単です。
  2. ビルド時に追加されていない場合は、Apache の起動時に mod_proxy をロードするようにします。具体的には httpd.conf ファイルで以下の指示子を使います。
    LoadModule proxy_module  {path-to-modules}/mod_proxy.so
    AddModule  mod_proxy.c
    
  3. httpd.conf で、Tomcat 5にフォワードしたい Web アプリケーションごとに2つの指示子を指定します。例えば、 コンテキストパス /myapp のアプリケーションをフォワードする場合は以下のようになります。
    ProxyPass         /myapp  http://localhost:8081/myapp
    ProxyPassReverse  /myapp  http://localhost:8081/myapp
    
    このように指定すると、 Apache は http://localhost/myapp/* という形式の URL を、8081番ポートをリッスンしている Tomcat 5 コネクタにフォワードします。
  4. Tomcat 5 を設定して、プロキシ設定を行なう特別な <Connector> 要素を追加します。例えば、
    <Connector className="org.apache.catalina.connector.http.HttpConnector"
                    port="8081" ...
               proxyName="www.mycompany.com"
               proxyPort="80"/>
    
    という設定をすると、この Web アプリケーション内のサーブレットでは、 プロキシからのリクエストをすべて www.mycompany.com の80番ポート宛であると見なします。
  5. <Connector> 要素では proxyName 属性を省略してもかまいません。その場合は、 request.getServerName() の返り値が Tomcat を実行しているホスト名となります。上記の例では localhost となります。
  6. (同じ Service 要素内で) 別の <Connector> がポート8080番でリッスンしている場合は、 2つのポートへのリクエストは同じ仮想ホストと Web アプリケーションを共有することになります。
  7. お望みなら、OS の IP フィルタリング機能を使って、 8081番ポート (この例の場合) への接続を、Apache が動いているサーバから のみ 許可するように制限できます。
  8. あるいは以下の手順で、一連の Web アプリケーションをプロキシ経由でのみ使えるように設定することもできます。
    • プロキシのポートへの <Connector> だけ入っている <Service> を別に設定します。
    • プロキシ経由でアクセス可能な仮想ホストと Web アプリケーションについて、 Engine要素、 Host要素、 Context 要素を適宜設定します。
    • 必須ではありませんが、上で説明した通り、 IP フィルタで8081番ポートにプロテクトをかけることも可能です。
  9. Apache でリクエストの中継を行なっている場合、この Web サーバはリクエストをアクセスログに記録します。したがって、Tomcat の方では通常はアクセスログ出力をする必要はありません。

この方法でリクエストが中継される場合は、設定した Web アプリケーションへの すべての リクエストは (静的コンテンツも含めて) Tomcat が処理します。

Apache 2.0 プロキシのサポート
1.3での手順と同様です。(例外として、Apache 2.0の場合は、 AddModule mod_proxy.cが不要です。)

[訳注: この文書は高橋達男が翻訳しました。 日本語訳に対するコメントがあれば、report@jajakarta.orgに送って下さい。]
Copyright © 1999-2003, Apache Software Foundation