OSCA

ApacheとTomcatの連携モジュールについて

このエントリーをはてなブックマークに追加

ApacheとTomcatとを連携させる際に、いつも連携モジュールの事で悩んでしまうのでメモです。

事前知識

リクエストの流れは・・・
ApacheとTomcatを連携させた場合、リクエストがTomcatで処理されるまでの流れは以下のようになります。

  1. クライアント(ブラウザ)がApacheにHTTPリクエストを投げる。(Apacheがリクエストを受ける)
  2. Apacheはクライアントから受けたリクエストに適当なリクエストをAJP(※1)でTomcatに投げる。
  3. Tomcatはコネクタ(※2)で受けたリクエスト情報に基づいてServletを呼び出す。

※1 AJP
Apache Jserv Protocol の略。 WebアプリケーションサーバのTomcatをApache Web Serverと連携させる際に使うプロトコル。

※2 コネクタ
コネクタはTomcatが接続要求を受けてレスポンスを返却するための仕組みです。 Tomcatはデフォルトの設定では8009番ポートで要求を待つよう server.xml に記述されています。

ということで、2でApacheからTomcatにリクエストを送るために必要なのが連携モジュールというわけ。

どのモジュールを選べばいいのか?

Googleで「Apache Tomcat 連携」などのキーワードで検索すると、連携方法がいくつかヒットしてしまいます。 それぞれを見ていくと連携モジュールの名称が違う事に気が付き、「えー、どれ使えばいいんだ!」となります。 これについて、まとめます。

連携モジュールは以下の名称を目にすることでしょう。

mod_webapp
公式のドキュメントには「mod_webapp(別名:warp)については、もう忘れてください。 開発者の関心がなくなったのと、JKやJK2のような優れたオプション指定ができないため、非推奨扱いかつサポート廃止となっています。」と書かれています。 ふむ、そういうことみたいなので、次の mod_jk の考察に移ります。

mod_jk
mod_webapp の説明に書いた通り、優れたモジュールのようで、たしかにGoogleで検索をするとたくさんの文献が見つかります。 じゃぁ、これでいいかというと、mod_jk2 の存在があります。

mod_jk2
mod_jk は優れていて品質も高いと書かれていますが、mod_jk をリファクタリングしたものが mod_jk2 ということです。 ほほう、じゃぁ、これでいいか! ん?

mod_proxy / mod_proxy_ajp
「Apache2.1からmod_proxyというモジュールが追加され、そちらに移行するため、mod_jk2はサポート対象外になりました。」 おっと! ちなみに、mod_proxy_ajp について引用すると、「Apache のプロキシ機能は mod_proxy の他に、 いくつかのモジュールに分割されています: mod_proxy_http, mod_proxy_ftp, mod_proxy_ajp, mod_proxy_balancer, mod_proxy_connect です。ですから、 特定のプロキシの機能を使いたい場合は、mod_proxy と 該当するモジュールをサーバに (コンパイル時に静的に行なうか LoadModule で動的に読み込むかして) 組み込む必要があります。」とあります。 AJPについて分割されたモジュールということですね。

ということで、この記事を書いた2011年現在、新しめのApache2.2をWEBサーバーとして構築する場合は、mod_proxy / mod_proxy_ajp を利用するのが良いということですね。

ここからの設定については、世の中に数ある文献にお任せして、この記事は終わりとします。 尚、この記事を書いている際に、mod_proxy_ajp の不具合を報告しているブログを見つけたので、下記の参考サイトにあげておきます。

<参考サイト>
mod_jk と mod_jk2 について
AJP (はてなキーワード)
ようやくmod_proxy_ajpの不具合について書いてみる

著者 : OSCA

OSCA

個人として何か一つでも世の中の多くの人に使ってもらえるサービスを作ろうと日々奮闘中のエンジニア。 夜景好きのアマチュア写真家でもあります。
Twitter : @oscaphoto
Facebook : OSCA