ChaboのFF11日記+(跡地)

IfritサーバでFF11をやっていたChaborinの日記でした。

Apache2.0とTomcat4.1の連携 - mod_jk1.2を使って

Apache+Tomcatの連携ってめちゃめちゃ需要がありそうなのだけど、まともに解説したページがほとんどないです。
Jakartaのページに行ってもいまいち理解できないし... プロダクトがありすぎてどれが最新だかわかんない。


例えば、mod_jk2とかmod_jk1.2なんて、mod_jk1.2のほうが新しいんですよ!
mod_jk2はメンテナンスモードに入っているとか書いてある。1.2 >> 2って何でやねんって感じw
で... ちまたではmod_jk2の連携解説ばっかりが書いてあるけど、最新版のmod_jk1.2を使うケースをメモっておきます。

必ずお読み下さい(2005/11/16追記)

この記事で紹介しているTomcat4.1+ajp1.3の組み合わせには脆弱性があることが判明しました。
http://www.ipa.go.jp/security/vuln/documents/2005/JVN_79314822_Tomcat.html#patch
これから構築される方は、なるべくTomcat5.0系列を使うことをお薦めします。



ではいってみよー!

  • 材料

Distribution: RedHat Enterprise Linux ES3
Apache: Apache-2.0.46 (pre-installed)
Tomcat: Jakarta-tomcat-4.1.31 (tar玉より - ここあとで改善予定)


http://www.apache.org/dist/jakarta/tomcat-connectors/jk/binaries/linux/jk-1.2.10/
にある
jakarta-tomcat-connectors-jk-1.2.10-linux-sles9-i386-prefork.so

をダウンロードしておきます。
そのままでは長すぎるので、mod_jk.soにリネームしておいてください。

  • 実際の作業

(ここからはroot権限の作業です。)

APACHE_HOME\modules (RHLES3なら、/usr/lib/httpd/modules)

の下にダウンロードしてリネームしたsoファイルをcpします。
次に、

APACHE_HOME\conf (RHLES3なら、/etc/httpd/conf/)
workers.properties

というファイルを作成します。ファイルの内容は下記の2行だけ。

worker.list=ajp13
worker.ajp13.type=ajp13



ここまででファイルと設定はok。
次にモジュールを起動可能にします:

APACHE_HOME\conf\httpd.conf (RHLES3なら、/etc/httpd/conf/httpd.conf)



LoadModule設定項目がだらだらと並んでいる項目がありますが、ここで下記の4行を追加:

LoadModule jk_module modules/mod_jk.so
JkWorkersFile "/etc/httpd/conf/workers.properties"
JkMount /*.jsp ajp13
JkMount /[tomcatのwebappsが入っているディレクトリ名]/* ajp13

を追加して保存します。
3〜4行目は、ajp13(tomcatの接続プロトコル)のターゲットとなるディレクトリなりファイルなりを指定するような感じに考えてもらえればわかりやすいと思います。
例えば、/hogehoge/というアプリがあったとするなら、

JkMount /hogehoge/* ajp13

という感じ。


あとは、tomcatを起動しておいて、httpdを再起動してください。
HUPシグナルか、

/usr/sbin/apachectl restart

あたりでどうぞ。
これでTomcatApacheの連携は終了!


つまり、ただポンとmoduleを置いてちょこっと設定書いてLoadModuleするだけ。
今までconfigureだのmakeだのしなければならないmod_jk2の苦労は一体何だったんだろう... というくらい簡単です...
ていうか、これRHLだとrpmになってそう。探すの面倒なのでやってないですが... むぅ。

  • あとがき

http://www.jajakarta.org/kvasir/bbs/technical/1104?expand=true
ここを見ると、

今後は、Apache2.0以前は、JK(JK1.2) を使用して、Apache2.1/2.2 からは標準添付される mod_proxy + mod_proxy_ajp を使うことになるようですね。

なるほど。今回はApache2.0だからmod_jk使って正解。2.1以降はmod_proxyなわけですね。あぁ、これだけじゃ足りないかぁ...