2009-7-16作成

 ■外部HTTPサーバー(Apache2)からTOMCATに連携

 ここではTOMCATとApache HTTPサーバー(Webサーバー)を連携させる方法について、手作業で設定ファイルを作成する方法を説明します。

 確認をしたのはWindows2000 + Apache 2.2.11環境です。

 ここの説明で対象としているのは、
・TOMCATとApacheが、別PC(サーバー)で動く場合
・TOMCATとApacheが同じPC(サーバー)で動くが、設定ファイルを手で作る場合
です。

 このどちらの場合でも、設定をする対象はTOMCATではなく、Apacheに対してです。この点は注意しておいてください。

 ■Tomcat Connecter(mod_jk)

 TOMCATとApacheを連携させるためにはTomcat Connecterというツールを使います。このApache用のConnecterツールの名前がmod_jkです。これのダウンロードについては「mod_jkのダウンロード」で説明していますので、そちらを参照してください。

 ダウンロードしたファイルはApacheをインストールしたディレクトリのmodulesディレクトリ下(例:C:\Apache Software Foundation\Apache2.2\modules)にコピーし、mod_jk.so にリネームします。

 ■Apacheの設定

 ◇1 Apacheの停止

 Apache HTTPサーバー本体の設定を始めます。もしApacheが動いているなら一度止めておいたほうが確実です。

 ◇2 httpd.confの変更

 Apacheの設定で対象になるファイルは、Apacheをインストールしたディレクトリのconf下にある httpd.conf です(例:C:\Apache Software Foundation\Apache2.2\conf)。これをテキストエディタやメモ帳で開いて編集します。

 このファイルの一番最後の方に次の2行を追加します。


# Tomcat Connector
Include "C:/Apache Software Foundation/Apache2.2/conf/mod_jk.conf"

 これはTOMCAT連携用接続ツールである、mod_jkの設定ファイルをApacheに組み込む、という設定です。

 ファイルパスのディレクトリ区切り文字は、\で無く/を使って指定します。

 また以下の設定ファイルについても同じですが、先頭が#の行はコメント行です。

 追加後のhttpd.confの、最後の部分のサンプルは


# Various default settings
#Include conf/extra/httpd-default.conf

# Tomcat Connector
Include "C:/Apache Software Foundation/Apache2.2/conf/mod_jk.conf"

# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

です。

 これは接続ツールであるmod_jkをApaceに組み込む指定ではなく、mod_jk用の設定ファイルとその配置場所をApacheに通知する、という指定です。

 ◇3 mod_jk.confの作成

 つづいて「2 httpd.confの変更」で追加した設定に対応する、mod_jk.confファイルを作成します。

 作成場所はhttpd.confへの追加行で指定したパスで、このページではC:\Apache Software Foundation\Apache2.2\confにしています。

 ここにテキストエディタやメモ帳で、mod_jk.confファイルを作成します。

 このmod_jk.confの作成方法は、大きく分ければ2通りあります。最初にそのうちの手っ取り早い方法について説明します。手っ取り早いというのはmod_jk.confの中に全ての設定情報を詰め込むため、この1ファイルだけ作成すればよいからです。

 ◇3−1 mod_jk.confの作成:パターン1


########## mod_jk.conf サンプル1 ##########

<IfModule !mod_jk.c>
  LoadModule jk_module "C:/Apache Software Foundation/Apache2.2/modules/mod_jk.so"
</IfModule>

# 転送先TOMCATの設定
# 接続名worker1は別サーバーで、worker2は同一サーバー内のTOMCATを指定している
    JkWorkerProperty worker.list=worker1, worker2

    JkWorkerProperty worker.worker1.type=ajp13
    JkWorkerProperty worker.worker1.host=192.168.0.1

    JkWorkerProperty worker.worker2.type=ajp13
    JkWorkerProperty worker.worker2.host=localhost

# TOMCATに転送するURIパターン指定
#   TOMCATのサーブレットサンプルはworker2、同一サーバーのTOMCATに転送
    JkMount /examples/servlets worker2
    JkMount /examples/servlets/* worker2

#   以下のURIはworker1、別サーバーのTOMCATに転送
    JkMount /examples/jsp worker1
    JkMount /examples/jsp/* worker1

    JkMount /tomcat-docs worker1
    JkMount /tomcat-docs/* worker1

    JkMount /host-manager worker1
    JkMount /host-manager/* worker1

    JkMount /manager worker1
    JkMount /manager/* worker1

# ここまではTOMCAT6の標準(インストールで組み込まれる)アプリ用設定

# 自動生成のとき作られるので、同じように作成した
    JkMount /*/servlet/ worker1
    JkMount /*.jsp worker1

# 自分で作成したアプリ用設定
    JkMount /TestAp worker1
    JkMount /TestAp/* worker1

 最初のLoadModule jk_moduleの指定で、接続ツールであるmod_jkの、実体ファイルであるmod_jk.soへのパスを指定しています。

 このファイルについては「■mod_jkのダウンロード」で説明しています。

 まずJkWorkerPropertyworker.listで、転送先を定義します。

 このサンプルではworker1、worker2と、2つの転送先TOMCATがある場合を例にしています。1つしか必要ないときはworker.listの引数で、,以降を削るだけです。

 そしてJkMountで転送を行うURIパターンと、転送先の関連付けを定義します。

 このサンプルではTOMCATのパッケージに含まれているサンプルのうち、「サーブレットサンプル」に対するリクエストは同一サーバー内のTOMCATに転送するようにしています。

 これ以外の「JSPサンプル」や「ドキュメント」、「TOMCAT管理画面」に対するリクエストは、別サーバーのTOMCATに転送しています。

 他の部分で
   JkMount /*.jsp worker1
というものがあります。これは拡張子がjspのファイル(ページ)に対するリクエスト全て、の意味です。JSPに対するリクエストは全てworker1として定義した、別サーバーのTOMCATに転送します。

 ◇3−2 mod_jk.confの作成:パターン2

 次のパターンは比較的新しい(mod_jkのバージョンが1.2.9以降)設定方法です。mod_jk.confに全てを詰め込むのでなく、目的に応じた複数の設定ファイルを使います。

 ここではそのためのmod_jk.conf設定内容を説明します。


########## mod_jk.conf サンプル2 ##########

<IfModule !mod_jk.c>
  LoadModule jk_module "C:/Apache Software Foundation/Apache2.2/modules/mod_jk.so"
</IfModule>

# 連携用接続ツールの設定ファイルを指定する
    JkWorkersFile "C:/Apache Software Foundation/Apache2.2/conf/workers.properties"

# TOMCAT転送用のURIパターンを指定した設定ファイルを指定する
    JkMountFile "C:/Apache Software Foundation/Apache2.2/conf/uriworkermap.properties"

 最初のLoadModule jk_moduleの指定で、接続ツールであるmod_jkの、実体ファイルであるmod_jk.soへのパスを指定しています。

 このファイルについては「■mod_jkのダウンロード」で説明しています。

 そしてJkWokersFileで指定しているのが、「mod_jk.confの作成:パターン1」ではJkWorkerPropertyで指定していた、設定内容を定義してある定義ファイルです。

 次のJkMountFileで指定しているのが、「mod_jk.confの作成:パターン1」ではJkMountで指定していた、転送用URIパターンを定義してある定義ファイルです。

 ◇4 workers.propertiesの作成

 これはmod_jk.confを「3−2」のパターン2で作成した場合に必要な作業です。

 このworkers.propertiesで転送先TOMCATの情報を設定します。そして転送先設定毎に名前を付けておきます。

 ここで付けた転送先設定名を、後述するuriworkermap.propertiesで使います。


# 接続名worker1は別サーバーで、worker2は同一サーバー内のTOMCATを指定している
worker.list=worker1,worker2

worker.worker1.type=ajp13
worker.worker1.host=192.168.0.1

worker.worker2.type=ajp13
worker.worker2.host=localhost

 まずworker.listで、転送先を定義します。このサンプルではworker1、worker2と、2つの転送先TOMCATがある場合を例にしています。1つしか必要ないときはworker.listの引数で、,以降を削るだけです。

 次が各転送先毎の詳細設定です。worker.転送先設定名.パラメータ名に対して値を設定します。

 typeパラメータは、Apache側に設定した接続ツールと、転送先TOMCATの通信方式を指定します。ここは全て標準のajp13を指定しておきます。

 hostパラメータで接続先設定名毎に、TOMCATが稼働している転送先を指定します。転送先のIPアドレスかHOST名を指定してください。

 例ではworker1という接続先設定では、他のサーバーをIPアドレスで指定しています。worker2の接続先設定ではHOST名でlocalhostを指定しています。そのため同一サーバー内で稼働している、TOMCATへの転送設定です。

 ◇5 uriwokermap.propertiesの作成

 これはmod_jk.confを「3−2」のパターン2で作成した場合に必要な作業です。

 uriwokermap.propertiesではTOMCATに転送するURIパターンと、転送先の接続設定名(workers.propertiesで定義した接続設定の名前)を指定します。


#   TOMCATのサーブレットサンプルはworker2、同一サーバーのTOMCATに転送
/examples/servlets=worker2
/examples/servlets/*=worker2

#   以下のURIはworker1、別サーバーのTOMCATに転送
/examples/jsp=worker1
/examples/jsp/*=worker1

/host-manager=worker1
/host-manager/*=worker1

/docs=worker1
/docs/*=worker1

/manager=worker1
/manager/*=worker1

# ここまではTOMCAT6の標準(インストールで組み込まれる)アプリ用設定

# 自動生成のとき作られるので、同じように作成した
/*/servlet/=worker1
/*.jsp=worker1

# 自分で作成したアプリ用設定
/TestAp=worker1
/TestAp/*=worker1

# HTMLファイルやJavaScriptファイルといった、静的なものは転送しない設定
# この設定では全てのURIパターンで転送されない
!/*.html=*
!/*.htm=*
!/*.css=*
!/*.js=*
# ただし実際にこの設定をすると、TOMCATドキュメントを参照できなくなる
# (TOMCATインストール時に一緒にインストールされるドキュメント)

# 例えばHTMLファイルはdocs/だけはApache上で処理するが、他は
# TOMCAT側に転送しても良いときは次のようにする(コメントは外す)
#!/docs/*.html=*

 この例ではTOMCATインストール時に一緒にインストールできるサンプルのうち、サーブレットサンプルに対するアクセスはworker2に転送しています。worker2はworkers.propertiesでlocalhost、同一サーバー内を指定しています。つまり同一サーバー内のTOMCATに転送されます。

 同じサンプルでもJSPサンプルや、その他のリクエストやworker1に転送しています。worker1はworkers.propertiesでIPアドレスで別サーバーを指定しています。つまり別サーバーのTOMCATに転送されることになります。

 また
/*.jsp=worker1
の行があるので、ここに定義されていないディレクトリへのアクセス、URIパターンのアクセスでも、拡張子がjspのファイル、つまりJSPへのアクセスはworker1、別サーバーのTOMCATに転送されます。


 またこのサンプルでは以上の説明とは逆に、TOMCATに転送しない設定も含んでいます。最後のほうにある、先頭が!で始まる行がそれです。先頭が!の行では転送除外パターンを指定します。

 サンプルではファイルの拡張子が、html(HTMLファイル)、htm(HTMLファイル)、css(スタイルシートファイル)、js(JavaScriptファイル)といった、静的なもの(ファイル)は転送しない設定です。

 画面のJavaScriptなら動的画面では、という意見もあるかもしれません。しかしJavaScriptで生成される結果画面は動的かもしれませんが、画面を生成するJavaScriptを定義したファイル自体は静的です(サーバー配置後は変化しないので)。

 このサンプルでは/*でパターン指定しているので、全てのURIパターンで上記拡張子のリクエストが対象です。

 そうでなく特定のURIパターン(ディレクトリ)に対するものだけを除外したいときは、上記例の最終行のようにしてください。例中ではコメントになっていますが、コメントを外すと
!/docs/*.html=*
の行です。

 この場合はURIパターン(ディレクトリ)が/docs/以下の、拡張子がhtmlに対する全リクエストは転送しない、という設定です。

 これの応用編で、特定の接続設定名への転送だけ除外する、という指定があります。
!/*.html=worker2
としておくと、拡張子がhtmlに対する全リクエストのうち接続設定名がworker2、つまり同一サーバー内のTOMCATへの転送設定は除外する、という意味です。拡張子がhtmlでもworker1、別サーバーへの転送設定は有効です(転送されます)。


 さてこの転送除外設定ですが、転送除外設定だけを指定しても意味はありません

 なぜなら明示的に転送設定をしない限りリクエストは転送されず、Apache内だけで処理されるからです。従って転送除外設定の意味は、特定URIパターンのリクエストはTOMCATに転送する。ただしあるパターンのときは転送しない。というものです。

 別の言い方をすると転送除外設定に指定した条件(URIパターン)は、転送設定に指定した条件(URIパターン)を上書きします。


このページの先頭  サーバーJava入門先頭  TOMCAT編先頭
Copyright © 2009- YOK. All Rights Reserved.