Linuxでサイトをつくる ApacheとTomcatをAJPで連携

トップ ›  Linux

Linuxでサイトをつくる

ApacheとTomcatをAJPで連携

2010年7月27日 

ここでは、Apache2とTomcatの連携をしたサイトの構築時の備忘録です。

本サイトはHTMLファイルで作成されているかのように見えますが、実は、JSPで動いています。つまりTomcatが主体で動いているサイトです。そこで、第一に問題となるのがTomcatとApacheとの連携です。

以前は、mod_jkコネクトを使用して連携をはかるのが主流でしたが、現在は、AJPを使用するのが一般的なようで、私もAJPで連携しましたので、その方法を以下に記述します。

まず、Apacheの「httpd.conf」のファイルを編集します。

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
↓コメントアウトします
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so

上記をコメントアウトして使用するに当たって、Apacheのmodulesディレクトリ内にmod_proxy_http.somod_proxy_ajp.somod_proxy.soという.soのモジュールが含まれている必要があります。Red Hat系のLinuxのディレクトリでは、/usr/lib64/modules内にあります(x64の場合)。

次に、AJPのプロキシ設定ですが、私の場合、バーチャルホストを使用しており、また、後述しますが、AJPの書き換えを容易にするためにIncludeを使用して、別に.confファイルを用意しています。その場合のApacheのhttpd.confの設定ファイルの書き方です)。

<VirtualHost *:80>
DocumentRoot "/home/ユーザー/docs"
ServerName www.fbijobs.net:80
Include /home/ユーザー/conf/ajp.conf
</VirtualHost>

次に、ディレクトリ/home/ユーザー/conf/を作成し、そこにajp.confファイルを作成します。

   

ajp.confの記述は下記のように記述します。

ProxyPass /new ajp://localhost:8009/new
ProxyVia On

上記のnewは、「JSPによるTomcatの動作確認」で作成したnewというアプリケーション・ディレクトリにアクセスするためのもので、ajp://localhost:8009/newnewは、Tomcat内のフォルダ名と一致していなければなりませんが、ProxyPass /newnewとは一致している必要はなく別名での指定が可能です。すなわち、「ProxyPass /abcd ajp://localhost:8009/new」という指定方法が可能で、この場合のアクセスURLはhttp://localhost/abcd/となります。

なぜ、別々のconfファイルを作成するかというと、Tomcatに新しいアプリケーションフォルダを追加していくたびに、権限に制限があるディレクトリにあるhttpd.confでは、そこにアクセスして改編するのが煩雑です。

この方法を採ると、ユーザー自身の権限内にconfファイルがあるので、容易にProxyPass を増やしていくことができるためです。

ただし、Apacheがアクセスできなければならないので、ユーザーディレクトリを
# chown -R ユーザー:apache /home/ユーザー
# chmod -R 755 /home/ユーザー
としてディレクトリの権限とパーミションを変更しておく必要があります。

それでは、Tomcatを起動して、それからApacheを起動してください(逆だとエラーが発生することがあります)。

そして、http://localhost/new/test.htmlにアクセスすれば、アクセスが可能になったと思います。

AJPによる日本語(全角文字)送信時の文字化け対策

AJPを使ってApacheとTomcatを連携さしている場合、Tomcat単体では文字化けが発生しなくても、連携させると文字化けが発生することがあります。(連携しなくても文字化けする場合は、[JSPによるTomcatの動作確認]を参照してください)。その場合、Tomcatのserver.xmlファイル内のAJPの設定値の箇所に「URIEncoding="UTF-8"」という設定を追記してください。なおRed hat系のTomcatでは既に設定がされています。記述内容は下記のとおりです。

<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3"
URIEncoding="UTF-8"/>

次回は、URIを mod_rewriteとJSPで連携