Apache2.2/Tomcat6.0連携で名前ベースのVirtualHostを実現する方法


最近は、ハードウェアのコストが安くなり、潤沢なリソースを利用することが多くなりました。
これにより、1つのサーバで1つのアプリケーションを運用するとリソースが余るので、複数のアプリケーションを運用したいが、ドメインは分けたいということがあるのではないでしょうか。

そこで、今回は、1つのサーバ(IP)で複数ドメインを使用することを実現する、名前ベースのVirtualHostという機能を紹介します。
また、Apache単体での利用ではなく、Javaで構築したWebアプリケーションをTomcatで動作させ、ajpプロトコルで連携する方法も組み合わせて紹介します。

検証環境

OS Linux
Apache Apache/2.2.16 (Unix)
Tomcat Apache Tomcat/6.0.32

DNSの設定

今回は、名前ベースによるVirtualHostですので、1つのIPに対して、複数のドメインを設定します。設定方法は、使用しているDNSサービスの使用方法を確認して下さい。

ドメイン レコード
domainA A 192.168.1.2
domainB CNAME domainA.jp

もっとドメインを増やす場合は、domainBに倣って追加することができます。

/etc/httpd/conf/httpd.conf の設定

以下の設定がされていることを確認します。

#
# Load config files from the config directory "/etc/httpd/conf.d".
#
Include conf.d/*.conf
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

/etc/httpd/conf.d/virtualhost.conf の設定

conf.dフォルダに設定ファイルを作成します。ファイル名は拡張子が「conf」であればOKです。適宜、名称を付けましょう。

<VirtualHost *:80>
    ServerName domainA.jp
    ProxyRequests Off
    ProxyPass /applicationName1/ ajp://localhost:8009/applicationName1/ 
</VirtualHost>

<VirtualHost *:80>
    ServerName domainB.jp
    ProxyRequests Off
    ProxyPass /applicationName2/ ajp://localhost:8009/applicationName2/ 
</VirtualHost>

まとめ

名前ベースのVirtualHostについては、リソースの有効活用という面では有益です。運用についてもサーバ1台を管理すれば良いので手間も省けます。
しかし、冗長性の面からするとサーバ1台の不具合によって、2つのアプリケーションがダウンすることになるため、被害が2倍になることも考慮した上でVirtualHostによる運用を決める必要があると思います。