トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

技術的雑談-mod_jkを使ってTomcatとhttpdを連携する

技術的雑談-mod_jkを使ってTomcatとhttpdを連携する


 環境

  • 使用OS:CentOS 3.5
  • httpd:Apache 2.0.46(多分2.0.xだったら大丈夫)
  • JDK 1.5.0_10
  • Apache tomcat 5.5.17
  • mod_jk(tomcat-connector) 1.2.20

 目的

  • mod_jkをコンパイルする
  • Tomcatへのhttpリクエストをhttpd経由で受け取るようにする

 手順


mod_jkとは?


mod_jkとは、ApacheやIISなどとTomcatを連携させる為のConnectorです。

Tomcatは単体でWeb Serverとしての機能ももっていますが、Apache httpd程の(Web Serverとしての)パフォーマンスや安全性、細かい設定はできないと言われています。
(すいません、私はテストしていません。)

そこで、一般的に公開するサイトではWeb Serverとしての機能をTomcatに持たせるのではなく、Apache httpdに持たせ、JSP・Servletの処理をTomcatに行わせるのが一般的なようです。
ここでhttpdとTomcatを仲立ちするのがmod_jkです。

                 ┌――――┐
httpリクエスト→ │ Apache ├―――┐ 処理を依頼 ┌――――┐
                 |        |mod_jk|―――――→| Tomcat |
httpレスポンス← |        |      |←―――――|        |
                 └――――┴―――┘ 結果を返す └――――┘

名前からわかるとおり、mod_jkはApache httpdのモジュール(DSO)として実装されています。

準備


まず、Apache httpdをInstallし、動作確認をしておきます。
(普通のLinuxならrpm、FreeBSDならportがあるはずです。2.0系を選びます。)

Tomcat Projectから「Download」→「Tomcat Connectors」を選び、「JK 1.2」の.tar.gz版のソースをDownloadします。

※JK2系というのもありますが、現在既にサポートが終了しており、今後改良の予定があるのはJK1.2系のようです。

また、mod_jkのコンパイルにはApache httpdのソース、apxs(httpd moduleのコンパイル・Install支援ツール)が必要です。
inuxのRedHat系のOSでは、httpd-develのrpmをInstallしておく必要があります。
(apxsなどが含まれているのでしょう。多分。)

Apache httpdのソースは使用するhttpdのバージョンと同じものをApache.orgから取得しておきます。

取得したhttpdのソースは/usr/src/以下に解凍しておきます。

同じく/usr/srcにtomcat-connectorsのソースを解凍しておきます。

Install


  • tomcat-connectors-1.2.20-src.tar.gzを/usr/src/以下に解凍します。
  • /usr/src/tomcat-connectors-1.2.20-src/native/へ行きます。
  • ./configure --with-apxs=/usr/sbin/apxs (←linuxの場合、apxsのある場所を指定します。)

FreeBSDなど、配置の異なるOSを使っている場合はapxsへのPathを変えます。
また、エラーが出るようだったら「--with-apache=PATH」でApache httpdのソースのDirectoryへのPathを与えます。

  • makeします。
  • /usr/src/tomcat-connectors-1.2.20-src/native/apache-2.0/mod_jk.soができていることを確認します。
  • apxs -n jk -i mod_jk.soでmod_jk.soをApache httpdのmodules/にInstallします。


設定


主にworkers.propertiesファイルとhttpd.confとserver.xmlを設定します。

workers.propertiesはhttpd.confと同じDirectory(CentOSの場合/etc/httpd/conf)に置きます。

worker.list=tomcat1, jkstatus
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13

worker.jkstatus.type=status

worker.list
全worker(httpdとTomcatをつなぐ仮想的なパイプ?)の名前を列挙します。
worker.xxxx.port
worker xxxxが担当するTomcatが待ち受けるPortを指定します。server.xmlにあわせます。(後述)
worker.xxxx.host
worker xxxxが担当するTomcatが存在するIP Addressを指定します。
worker.xxxx.type
「ajp12」「ajp13」のどちらかを指定します。ajp13の方が新しいので普通はそちらを使います。この設定はserver.xmlの設定とあわせる必要があります。
worker.jkstatus.type=status
ここでの「jkstatus」は特殊なworker定義で、mod_jkをWeb経由で参照・操作する事ができる画面のエンジンです。本番環境ではいらなければいらないですが、あると便利です。(特にsticky sessionの確認などで。)

次に、httpd.confに追記します。
/etc/httpd/confと同じDirectoryにconf.dがある場合、そのDirectoryに「mod_jk.conf」というファイルを作ってそこに書き込めばOKになる場合もあります。
もしそれが働かなかったり、そもそもconf.dが無い場合はhttpd.confの最後にでも追記します。

LoadModule jk_module modules/mod_jk.so

<IfModule mod_jk.c>
	JkWorkersFile	/etc/httpd/conf/workers.properties
	JkLogFile	/var/log/httpd/mod_jk.log
	JkMount		/jsp-examples/*	tomcat1
	JkMount		/jkstatus	jkstatus
	JkMount		/index.jsp	tomcat1
</IfModule>

LoadModule jk_module modules/mod_jk.so
先にInstallしたmod_jk.soをApache httpdから使用する宣言です。
JkWorkersFile
先に作成したworkers.propertiesの場所を指定します。
JkLogFile
mod_jk自体が出力するlogの場所を指定します。
JkMount
Tomcatに処理をさせたいURLを指定します。「*」などでワイルドカード指定することも可能です。URLの次に実際に処理をさせるworkerを指定します。(wirkers.propertiesにあわせる。)

最後にTomcatのserver.xmlを確認します。
server.xmlはXMLファイル形式です。

確認点は、

  • <Connector>タグで指定されている「port」がworkers.propertiesで指定したものと合っているか?
  • <Connector>タグで指定されている「protocol」がworkers.propertisで指定したものとあっているか?(Default状態のserver.xmlではprotocolに「http」が指定されているConnectorがありますが、それとは違います。protocol="AJP/1.3"のConnector定義はコメントアウトされています。)
  • 同じportを使っているConnectorが定義されている場合はコメントアウトします。(AJP/1.2とか)

です。

起動・終了


Apache httpd + mod_jk + Tomcat環境では、「Tomcat→httpd」の順番で起動する必要があります。

  • httpdが起動しているか確認します(ps aux | grep httpd)。起動している場合は終了させます。
  • Tomcatを起動します。エラーが無い事を確認します。(/usr/java/tomcat-5.5/log/catalina.out)
  • httpdを起動します。(linuxの場合は/sbin/service httpd start)
  • エラーが無い事を確認します。(service使用の場合はOKが返れば問題ないことが多い。)
  • mod_jkのエラーが無い事を確認します。(上の例では/var/log/httpd/mod_jk.log)

実際にTomcatが処理するべきURLを開いて処理が行われているか確認します。
前記の例だと、http://〜/jsp-examples/がTomcatで処理され、JSPのサンプルが見れるはずです。

 関連項目






 履歴

2007/01/17 -- 初版

技術的雑談へ戻る

 突っ込み


name   comment  
URL (入力するとす ぱ むとみなします!)


技術的雑談へ戻る

TrackBack

TrackBack URL for this entry:
http://www.himajin2001.com/fswiki/tb.cgi/%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC%2Dmod%5Fjk%A4%F2%BB%C8%A4%C3%A4%C6Tomcat%A4%C8httpd%A4%F2%CF%A2%B7%C8%A4%B9%A4%EB

技術的雑談へ戻る

最終更新日時:最終更新時間:2011年12月21日 17時51分08秒
トップページに戻る