TomcatのWebサーバとしてApacheを利用するにはモジュールを組み込み、設定を行わなければならない。モジュールには「mod_jk」や「mod_jk2」などがある。
仕組み
連携時の動きは以下のようになる。
- ユーザがあるアドレスにアクセス。普通ポートは80番。
- 80番で待ち受けていたapacheは、まずそのアドレスがconf/workers2.propertiesのなかで設定されているアドレスと一致するか調べる。一致していたら処理をtomcatに渡し、一致していなかったらapacheだけで処理する。
- apacheがtomcatに処理を渡した場合は、tomcatはそのアドレスがconf/web.xmlや、webapps以下のフォルダのWEB-INF/web.xmlを調べて、一致するものを探す。一致したら、指定してあるservletを実行する。
つまり、サーブレットを動かしたい場合は、動かしたいファイルがおいてあるフォルダのweb.xmlに、servletのクラス名とアクセスのされ
る呼び出し名の組を書きこんでおき、さらにその呼び出し名をworkers2.propertiesに設定するという感じとなる。
くわしくはjk2などのドキュメントがjakartaで翻訳されているのでそちらを。
手順
mod_jkの場合
Apache.orgのダウンロードページを表示する。
「JK 1.2 Binary Releases」からmod_jkをダウンロードする。
Apache2をインストールしたディレクトリにある「modules」フォルダに「mod_jk-apache-2.0.XX.so」をコピーする。
コピーした.soファイルを「mod_jk.so」にリネームする。
他の解説サイトでは「.dll」などになっている場合もあるが、Linux用のモジュールファイルである「.so」拡張子になっていても気にしなくていい。
httpd.confにコピーしたモジュールの設定を記述する。
LoadModule jk_module modules/mod_jk.so
- Apache2.0.55とTomcat5.5の連携ではmod_jkは使えない模様。
- httpd.confの最終行に記述しないと動かないApacheもあるらしい
mod_jk2の場合
Apache.orgのダウンロードページを表示する。
「JK 2 Binary Releases」からmod_jkをダウンロードする。
Apache2をインストールしたディレクトリにある「modules」フォルダに「mod_jk2.so」をコピーする。
httpd.confにコピーしたモジュールの設定を記述する。
LoadModule jk2_module modules/mod_jk2.so
- httpd.confの最終行に記述しないと動かないApacheもあるらしい
workers2.properties
workers2.propertiesを作成し、Apache2の「conf」フォルダに配置する。
// workers2.properties
[status:]
[uri:/jkstatus/*]
group=status:
[shm:]
disabled=1
[channel.socket:localhost:8009]
[ajp13:]
[uri:/servlets-examples/*]
確認
Tomcat > Apacheの順番で起動する。
ApacheのHTTPポートが80の場合、以下のアドレスにブラウザよりアクセスする。
http://localhost:80/servlets-examples/
これでTomcat内のWebアプリである「servlets-examples」が表示されればOK。ApacheのポートでTomcatにアクセスできることがわかるはず。
TomcatのWebサーバ機能の停止
ApacheががんばってくれるのでTomcatの8080サービスを停止する。server.xmlの以下の部分をコメント化する。
<!--<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />-->
<!-- Note : To disable connection timeouts, set connectionTimeout value
to 0 -->