mod_proxy_ajpによるApache - Tomcatの連携
mod_jkがいつの間にか非推奨になっており、Apache - Tomcat間の連携はmod_proxy_ajpを利用しろとのこと。
Fedora Core 5にインストールされているApacheは最初からmod_proxy_ajpを組み込まれているようなので「/etc/httpd/conf.d/proxy_ajp.conf」に以下のように記述すればOK。
<Location /test/> ProxyPass ajp://localhost:8009/hoge/ </Location>
以上により、http://localhost/test/*へのリクエストがajp://localhost:8009/hoge/*に転送されます。
VirtualHostを利用している場合もVirtualHostディレクティブ内にProxyPassを記述すればよい。
<VirtualHost 192.168.1.99:80> ServerAdmin webmaster@fractus.info DocumentRoot /var/www/html ServerName www.fractus.info ErrorLog logs/www.fractus.info-error_log CustomLog logs/www.fractus.info-access_log combined ProxyPass /horicuhi/ ajp://www.fractus.info:8009/horiuchi/ </VirtualHost>
ただ、サーバルートへのリクエストをTomcatに連携するときに少々はまった。
具体的には、http://www.mubou.org/へのリクエストをajp://www.mubou.org:8009/に転送したときに、HttpServletRequest#getContextPath()の返り値が「horiuchi」という意味不明な文字列を返したこと。
本来ならばサーバルートへのリクエストなんだからHttpServletRequest#getContextPath()は空文字を返さなければいけないはずなのに、設定ファイル内を色々いじっても全然なおらない。
ちなみにTomcatの設定ファイルでは「$TOMCAT_HOME/conf/Catalina/www.mubou.org/horiuchi.xml」内において以下のように記述していた。
<Context path="" docBase="/tomcat/web/mubou/horiuchi" debug="0" privileged="true"> </Context>
結局は設定ファイルの名前を「$TOMCAT_HOME/conf/Catalina/www.mubou.org/horiuchi.xml」から「$TOMCAT_HOME/conf/Catalina/www.mubou.org/.xml」に変更したらうまくいった。
HttpServletRequest#getContextPath()って設定ファイルの名前から値を取得してたんですねえ...ってそんな馬鹿なw
普通Contextタグ内のpath属性の値だと思うよねえ...。まあ仕様書読んでない私が悪いんだろうけどさ。