Virtual Hostで特定のドメインのみApache2+Tomcat連携する設定

ApacheのVirtual Hostで特定のドメインのみ、Tomcat連携する設定のメモです。

もろもろのバージョンによって設定方法は異なりますが、今回設定を行ったのは以下の環境です。


httpd.confを以下のように設定します。*1

<virtualhost *:80>
   ServerName example.com
   DocumentRoot /var/www/example/htdocs

・・・中略・・・

    <Location "/java/*">
        JkUriSet worker ajp13:localhost:8009
    </Location>
</virtualhost>

上記はexample.com/java配下の全てのURIリクエストをTomcatアプリケーションと連携する設定になっています。

拡張子がjspのリクエストだけを連携する場合は以下のような形になります。

    <Location "/java/*.jsp">
        JkUriSet worker ajp13:localhost:8009
    </Location>


次にtomcatの/conf/server.xmlを設定します。

<Engine name="Catalina" defaultHost="localhost">

・・・中略・・・

  <Host name="example.com" debug="0"
    unpackWARs="true" autoDeploy="true">
    <Logger
      className="org.apache.catalina.logger.FileLogger"
      directory="logs" prefix="example.com." suffix=".log"
      timestamp="false"/>

    <!-- Context Root -->
    <Context path="" docBase="/usr/local/tomcat/webapps" debug="0"
           reloadable="true" crossContext="false">
    </Context>
  </Host>

docBaseはwebappsのpathに合わせて設定します。

httpd.confのLocation設定でドキュメントルート以外を設定した場合でも、web.xmlのurl-patternではドキュメントルートから設定する必要があります。

例えば、上記の例のように「」とした場合のトップページのservlet設定は今のようになります。

        <servlet>
                <servlet-name>index</servlet-name>
                <servlet-class>com.example.IndexPage</servlet-class>
        </servlet>
        <servlet-mapping>
                <servlet-name>index</servlet-name>
                <url-pattern>/java/</url-pattern>
        </servlet-mapping>


詳しくは以下のドキュメントを参照して下さい。


Apache 2.0.43 - Tomcat 4.1.12 - jk2 - virtual host HOWTO
http://tomcat.apache.org/connectors-doc-archive/jk2/jk2/vhosthowto.html

*1:Apache2+Tomcat連携自体は既に正常に設定されているものとします