garbagetown

個人の日記です

mod_proxy_ajp と VirtualHost

試行錯誤の末、やっとできたので手順をメモ。ぼくのところでは動いているけど、いまいち自信が無いので参考にされる際は用法・容量を守って正しくお使いください。

環境

Host

Tomcat の server.xml に Host 設定を追記して dpz.bierleichen.org でアクセスできるようにする。
appBase がデフォルトの webapps だと後の工程でコケたので、新規のディレクトリを作成して指定しています。

$ cd /etc/tomcat6/
$ sudo cp -p server.xml server.xml.org
$ sudo vi server.xml
(snip)
    <Engine name="Catalina" defaultHost="localhost">
(snip)
      </Host>
      <Host name="dpz.bierleichen.org" appBase="dpzapps"/>
    </Engine>
  </Service>
</Server>
$ sudo mkdir /var/lib/tomcat6/dpzapps

Context

ドキュメントを読むと Tomcat 5 以降では Context 要素を server.xml に書くなボケ とあり、Host で指定したホストのデフォルトアプリケーションを 指定するには $CATALINA_HOME/conf/[enginename]/[hostname]/ に ROOT.xml を置けとあるので、これに従います。

$ cd /etc/tomcat6/Catalina
$ sudo mkdir dpz.bierleichen.org
$ sudo vi dpz.bierleichen.org/ROOT.xml
<Context docBase="/var/lib/tomcat6/webapps/dpz"/>

Host では appBase に新規に作成したディレクトリを指定しているにも関わらず docBase にはデフォルトの webapps 配下のアプリケーションを指定している辺りに「なにも分かってないなこのバカ」的な香ばしさが漂っているが、恥多き我が人生、今さら赤っ恥のひとつやふたつ増えたところで別にどうと言う事はない。

再起動

Tomcat を再起動すると、今まで http://bierleichen.org:8080/dpz/ でアクセスしていたアプリケーションに http://dpz.bierleichen.org:8080/ でアクセスできるようになる。

$ sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6
   ...done.
 * Starting Tomcat servlet engine tomcat6
   ...done.

VirtualHost

続いて Apache に VirtualHost の設定を追加する。Apache 2.2 くらいから VirtualHost の設定は sites-available 配下に記述して sites-enabled にシンボリックリンクを貼るのが作法になっているらしいので、これに従う。

$ cd /etc/apache2/
$ sudo vi sites-available/dpz.bierleichen.org
<VirtualHost *:80>
   ServerName dpz.bierleichen.org
   <Location />
      ProxyPass ajp://dpz.bierleichen.org:8009/
      Order allow,deny
      allow from all
   </Location>
</VirtualHost>

$ sudo ln -s sites-available/dpz.bierleichen.org sites-enabled/dpz.bierleichen.org
$ ls -la sites-enabled/
total 8
drwxr-xr-x 2 root root 4096 2009-02-07 10:50 .
drwxr-xr-x 7 root root 4096 2009-01-25 17:21 ..
lrwxrwxrwx 1 root root   26 2009-01-11 09:29 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root   38 2009-02-07 10:50 dpz.bierleichen.org -> ../sites-available/dpz.bierleichen.org

基本的には Apache と Tomcatを連携させる ときと同様に Location ディレクティブを書いて VirtualHost ディレクティブで囲むだけ。

hosts

/etc/hosts にバーチャルドメインの情報を追記します。

$ sudo vi /etc/hosts
(snip)
xxx.xxx.xxx.xxx   dpz.bierleichen.org

再起動

Tomcat, Apache の順に再起動すると、今まで http://dpz.bierleichen.org:8080/ でアクセスしていたアプリケーションに http://dpz.bierleichen.org/ でアクセスできるようになる。

$ sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6
   ...done.
 * Starting Tomcat servlet engine tomcat6
   ...done.
$ sudo /etc/init.d/apache2 restart
 * Restarting web server apache2
 ... waiting    ...done.

よく分からないこと

以上の手順で何とか目的を達成できたわけですが、以下の点がよく分かっていません。

  • としたら http://dpz.bierleichen.org:8080/ でアクセスできなかった。そのため空っぽの dpzapps ディレクトリを作るハメになった
  • としたら dpz.war が自動的に展開されなかった。docBase に /var/lib/tomcat6/dpzapps/dpz.war を指定すればいい気もするが、なんとなく展開したい
  • そもそも Apache の VirtualHost 設定だけで目的を達成できるんじゃね?と思って Tomcat の設定を全部消して ProxyPass ajp://localhost:8009/dpz と指定したがダメだった。VirtualHost の理屈がよく分かっていない

教えてエロい人!