記tomcat中虛擬主機的配置

在開發的時候都是直接把war包直接扔到tomcat的webapps目錄下,經過localhost:8080/project來訪問,可是在上線系統的部署,顯然不可能經過www.xxx.com/project這樣去訪問的。java

原來天真的認爲域名是能夠指向IP:端口/project這樣的,今天去客戶那部署發現徹底不是那麼回事,域名只能指向IP,因而立刻求助度娘,找到以下方案。web

在tomcat的conf/server.xml中,默認有個節點是tomcat

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"></Host>

其中localhost就是本機的域名,在hosts文件中能夠看到一句話:localhost name resolution is handled within DNS itself.即localhost指向的是本機,127.0.0.1這個ip。經過修改和添加Host能夠增長tomcat的虛擬主機,並綁定域名。app

這裏實驗我就放兩個war包,一個是admin.war,對應的域名是admin.xxx.com。一個是sm.war,對應的域名是www.xxx.comwebapp

在本機作實驗的時候,能夠經過修改hosts文件模擬域名訪問。這裏我就添加三個域名進去spa

127.0.0.1 www.xxx.com
127.0.0.1 admin.xxx.com

接下來在tomcat中配置虛擬主機.net

先說明一下兩個主機的目錄結構code

tomcat
├─admin
│  └─war
├─sm
│  └─war


稍後解釋爲何目錄這麼建。orm

在server.xml中添加兩個虛擬主機server

<Host name="www.xxx.com"  appBase="sm" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="./war/sm.war" />
</Host>
<Host name="admin.xxx.com"  appBase="admin" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="./war/admin.war" />
</Host>

說明一下其中的參數

Host

name 虛擬主機名,通常寫域名
appBase 虛擬主機應用的目錄
unpackWARs
若是爲true,會解壓war包,不然不解壓,直接運行
autoDeploy 默認爲true,表示若是有新的WEB應用放入appBase而且Tomcat在運行的狀況下,自動載入應用。

context

path web應用名,
docBase web應用的具體存放路徑

path的做用能夠看這位朋友寫的tomcat原理了解一下:http://blog.csdn.net/xiemk2005/article/details/5988764

配置完成後啓動tomcat,就經過域名訪問兩個app了。

這裏有幾點要說明的:

  1. 剛剛在創建目錄的時候爲何要創建war目錄

    在appBase中指定的根目錄中若是有war包,tomcat就會加載到內存中去,而子目錄裏的war包不會。也能夠把war包扔到appBase意外的其餘目錄去,Context的docBase裏指定就能夠了。

  2. 爲何不把war包都放在webapps裏

    因爲個人path配置是「」(空字符串),默認會解壓到ROOT目錄中去,若是都放在webapps裏,就都會解壓到ROOT

相關文章
相關標籤/搜索