トップ 一覧 検索 ヘルプ 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|http://tomcat.apache.org]から「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|http://httpd.apache.org/download.cgi]から取得しておきます。

取得した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のサンプルが見れるはずです。

!!関連項目

*[[LinuxでのJDKのInstall|技術的雑談-LinuxでのJDKのInstall]]

*[[Tomcat5.5をLinuxにInstallする|技術的雑談-Tomcat5.5をLinuxにInstallする]]

*[[複数のTomcatを立ち上げてmod_jk経由でロードバランスさせる|技術的雑談-複数のTomcatを立ち上げてmod_jk経由でロードバランスさせる]]

*[[複数のTomcat間でSessionの途切れないClusterを作る|技術的雑談-複数のTomcat間でSessionの途切れないClusterを作る]]

!!履歴
2007/01/17 -- 初版

[[技術的雑談]]へ戻る

!!突っ込み

*aaa - aa (2011年12月21日 17時51分08秒)
{{comment}}

[[技術的雑談]]へ戻る

{{trackback}}

[[技術的雑談]]へ戻る