Apache-Tomcat連携におけるAJP
Apache-Tomcat連携において、一般的に静的コンテンツはApacheに処理をさせ、
動的コンテンツはTomcatへ転送する仕組みをつくるもの、と思われる。
例えば以下のような。
1.Webサーバは受け取ったリクエストが設定したURLパターンに合致する場合、
そのリクエストを連携モジュールに渡す。
2.連携モジュールは連携プロトコルを使用し、そのリクエストを連携コネクタに渡す。
3.連携コネクタはリクエストをJSP/サーブレットコンテナに渡し、そこで処理が実行される。
ApacheとTomcatが通信するための仕組みとして、AJPコネクタという機能がある。
上記の転送の仕組みのうち、連携プロトコルがAJPプロトコル、連携コネクタが
AJPコネクタにあたる、と考えてよいのだろう。
通常Tomcatが利用するポートは8080だが、AJPコネクタを利用する通信においては
8009ポートを使用する。
AJPコネクタの利用は、Apache 2.2系列ではmod_proxy_ajpというモジュールを利用する。
(2.0以前ではApache-Tomcat連携時にmod_jkモジュールを利用)
パッケージでApacheをインストールした場合はデフォルトでmod_proxy_ajpが搭載されているが、
ソースインストールの場合はconfigure時に以下のオプション指定する必要がある。
- -enable-proxy
- -enable-proxy-ajp
ふたつのモジュール、mod_proxy.soとmod_proxy_ajp.soをApache設定ファイルhttpd.conf
で有効にする。(#がついていたら外す)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
ついでに、ProxyPassを定義したhttpd-proxy.confファイルを読み込ませるように記述。
Include conf/extra/httpd-proxy.conf
httpd-proxy.confには以下のような記述をする。
/ 以下のリクエストを8009ポートでTomcatに転送する例。
また静的コンテンツ用のProxyPass に!を指定することで、Apache側に処理をさせる。
ProxyPass /html !
ProxyPass /images !
ProxyPass / ajp://localhost:8009/
※ファイルパスはApacheインストールディレクトリ配下、/conf/extra/httpd-proxy.conf。
CentOS 5.*だと/etc/httpd/conf.d/proxy_ajp.confが用意されているらしいのでそちらを利用。
環境によりパスやファイル名称は他のパターンに変わることがあるかもしれない。
Tomcat側、server.xmlの設定。※CATALINA_HOME/conf/server.xml
AJP/1.3プロトコルを使い8009ポートで接続を行うための記述。
デフォルトで最低限の記述はしてあるようだが。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
URIEncoding="UTF-8" useBodyEncodingForURI="true" />
・・・などなど、一応自分なりにまとめてみたものの、認識違いや抜けがあるかもしれないので、
都度修正・追記します。