apache-tomca+apacheで web+Java Servletを作る
先日仕事でJava Servletが動くサーバーを作ったのだが、実行環境であるapache-tomcat自体はバイナリパッケージを落としてきて展開するだけ、と激しく簡単である。
しかしこれではapacheと同じポートで同時に使えない。
どうせなら同時にapacheも使いたいので、apacheとTomcatを連携させるために、ネット上の情報を探したのだが、apache-tomcatを使うだのjakarta-tomcatを使うだのと二通りの情報が錯綜していて良くわからんかった。
そもそもapache-tomcatとjakarta-tomcatの違いがはっきりしなかったのやけど、色々調べた結果、結局この二つは同じ物を指していて、apache-tomcatの古い呼び方がjakarta-tomcatであると便宜的に理解しておいても大丈夫そうだ。
ややこしい話やけど、apache内のjakartaプロジェクト内のtomcat製作プロジェクトで作られたものがjakarta-tomcatで、後にtomcatプロジェクトが格上げされてapache直下のjakartaプロジェクトと同じ位置に来たのでapache-tomcatとなったと言う事らしい。どちらも作っているものは同じである。
apache-tomcatもjakarta-tomcatもどちらもJava Servletである。
で、apacheとTomcatを連携させて同じポートで動かす、つまり、apacheの特定のディレクティブだけtomcatで動作させるためには、apache + Tomcat Connectors + Tomcat(apache-tomcat)という構成すれば良い。
イメージとしては、apacheとtomcatが個別に動いていて、apacheへの特定のディレクティブへのアクセスを、apacheのモジュールであるTomcat Connectorsがリバースプロキシの様な働きをしてTomcatの特定のポートから転送するといった動作のようだ。(想像)
環境は OpenSolaris 200805
コンパイラはsunstudioexpress(SunStudio11ベース?)
apache_1.3.41 apache-tomcat-6.0.18 tomcat-connectors-1.2.26
apacheとtomcat-connectorsのみソースからインストール
とりあえずapacheを
./configure –enable-rule=SHARED_CORE –enable-module=so –prefix=/usr/local/apache
って感じの –enable-module=so つきでコンパイル、ポート80で動かす。
Tomcatをどこぞに展開して、bin/startup.sh で起動、
server.xmlのAJPプロトコルのバージョンと動作ポートを確認、
<!– Define an AJP 1.3 Connector on port 8009 –>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
なのでajp13 ポート8009となる。
どちらもちゃんと動いていればtomcat-connectorsのインストール
tomcat-connectors-1.2.26-srcのコンパイル
$ cd tomcat-connectors-1.2.26-src/native/
$./configure –with-apxs=/usr/local/apache/bin/apxs
$make
#make install
とすれば
apacheのlibexecディレクトリにモジュールmod_jk.*がインストールされる
ただし、solarisの場合、
/usr/ccs/bin/make
/opt/SUNWspro/bin/dmake
/opt/SunStudioExpress/bin/dmake
では如くコンパイルエラーが出るようだ。
gnuのmakeを使えばちゃんと通るので入ってなければ入れる。
apacheのconfディレクトリに移動
httpd.conf に以下を追加
<IfModule mod_jk.c>
JkWorkersFile conf/tomcat.conf
JkLogFile logs/mod_jk.log
#Tomcatの/examples以下を転送
JkMount /examples/* tomcat
</IfModule>
tomcat.conf を新規作成して以下を追加
worker.tomcat.port=8009
worker.tomcat.host=localhost
worker.tomcat.type=ajp13
apche再起動
tomcat再起動