ApacheとTomcatの連携モジュールについて
ApacheとTomcatとを連携させる際に、いつも連携モジュールの事で悩んでしまうのでメモです。
事前知識
リクエストの流れは・・・
ApacheとTomcatを連携させた場合、リクエストがTomcatで処理されるまでの流れは以下のようになります。
- クライアント(ブラウザ)がApacheにHTTPリクエストを投げる。(Apacheがリクエストを受ける)
- Apacheはクライアントから受けたリクエストに適当なリクエストをAJP(※1)でTomcatに投げる。
- 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について分割されたモジュールということですね。
ここからの設定については、世の中に数ある文献にお任せして、この記事は終わりとします。 尚、この記事を書いている際に、mod_proxy_ajp の不具合を報告しているブログを見つけたので、下記の参考サイトにあげておきます。
<参考サイト>
mod_jk と mod_jk2 について
AJP (はてなキーワード)
ようやくmod_proxy_ajpの不具合について書いてみる