2012-07-25

Virtual Host in Tomcat 6.0.35

Virtual Host 就是使用不同的網址連到同一個 Tomcat instance 的不同 Webapp,Tomcat 預設的 host 為 localhost。

開啟 Tomcat/config/server.xml:
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost"  appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
假設要使用兩個 Virtual host,網址分別為 vh1.neil.idv 與 vh2.neil.idv,其對應的 appBase 分別為 webapps_vh1 與 webapps_vh2,只要加上兩個 Host 定義如下:

<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost"  appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="vh1.neil.idv"  appBase="webapps_vh1"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="vh2.neil.idv"  appBase="webapps_vh2"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
官方文件提醒:appBase 不可以重疊,也就是有上下層目錄關係。


至於 Virturl host 的 webapp 位置有三種設定方式:

1. 就放在 appBase 指定的位置

建立 webapp_vh1 與 webapps_vh2 兩個目錄,並產生必要的 web app。

2. 使用 webapp_vh1/META-INF/context.xml 自訂 webapp 位置

建立上述的目錄與檔案 context.xml:
<Context 
 path="" 
 docBase="{VH1_ROOT_WEBAPP_PATH}" 
 reloadable="true"/>
VH1_ROOT_WEBAPP_PATH 指向自訂的位置。

3. 使用 conf/Catalina/vh1.neil.idv/ROOT.xml 自訂 webapp 位置

建立上述的目錄與檔案 ROOT.xml:
<Context 
 docBase="{VH1_ROOT_WEBAPP_PATH}" 
 reloadable="true"/>
這種設定方式不需要設定 path,path 由設定檔名稱決定(即 ROOT),VH1_ROOT_WEBAPP_PATH 指向自訂的位置。

事實上,使用過第 2 種設定方式後,Tomcat 自動產生第 3 種方式的設定檔。


最後但是非必要的步驟,編輯 Windows 的 hosts 檔案,加上網址的對應如下:
127.0.0.1  vh1.neil.idv
127.0.0.1  vh2.neil.idv

完成後,就可以分別使用 http://vh1.neil.idv/ 與 http://vh2.neil.idv/ 連到 vh1 與 vh2,而 http://localhost/ 還是可以連到 webapps。
---

沒有留言:

張貼留言