すがブロ

sugamasaoのhatenablogだよ

apache2.2でのtomcatとの連携

JSPServletなどのJ2EEで開発を行う際に、単純に開発環境として環境構築する際にはtomcatだけでも十分な場合があるけど、実際に運用するにはapachetomcatを連携させて動かすのが普通だと思う。
連携っていうのを乱暴に説明すると、ポート80でtomcatを動かす為の設定だと思えば良い(こうしないとhttp://localhost:8080なんて形でアクセスしないとJSP/Servletが動かないっていうダサいことになる)。
以前のapache(2.0とそれ以前)ではmod_jkおよびmod_jk2というコネクタ(モジュール)を使用して連携を行っていたんだけど、2.2以降では方式が変わったようだ。
以前までのmod_jkはjakartaからDLとかして使用していたのだが、2.2からはmod_proxy_ajpというデフォルトで組み込まれているコネクタ(モジュール)を使用して連携を行うようになっている。
ただし、mod_proxy_ajpを使用するにはmod_proxyというモジュールも一緒に組み込まなくてはいけないので注意。使用する際もそうだが、ソースからメイクする際にconfigureなどの設定でモジュール追加を行う際にもmod_proxyも組み込むように設定しないとうまくいかない。
というわけで、モジュールは別途用意する必要がなくなった、ということを説明した。
次は設定について。
以前(mod_jk)はworkers.propertiesと言った設定ファイルを作成することでtomcatへアクセスされたリクエストを受け渡していたが、mod_proxy_ajpではhttpd.conf内*1に記述することができるようになった。
例えばこうだ


ProxyPass ajp://localhost:8009/jsp-examples/

/jsp-examples/以下のファイル・ディレクトリにアクセスがあった場合はajpというプロトコルを使用してtomcatへリクエストへ送る、という内容だ。
以前のworkers.propertiesの時は指定したディレクトリ以下を全て、という時はワイルドカードを使用していた(はず)なので、そこらへんの注意は必要かもしれない。
というわけで、まとめ。
apache2.2以降では、

  • mod_proxyモジュール読み込み(httpd.confに記述)
  • mod_proxy_ajpモジュール読み込み(httpd.confに記述)
  • Locationディレクティブの記述(httpd.confに記述)

という作業だけでapachetomcatの連携ができるというわけである。モジュールも既に組み込まれているので(ソースからメイクする際には追加するための記述が必要だけど)、単純にapache内の設定で完結するので簡単だ。

apache2.2対応のmod_jkが見つからない! と憤慨してディスプレイを叩き割る前にmod_proxy_ajpの方をチェックしてみよう。

*1:apache2.2的な流儀で言えば専用のconfファイルを作ったほうがいいのかな