最近和Tomcat較上勁了。。。
作為Tomcat的系列之一,來嘗試下如何用一套Tomcat來處理多個域名請求。
場景:基於成本考慮,多個department共用一台服務器,然后該服務器上就一套Tomcat。各個department有各自的域名,這樣就需要配置Tomcat的虛擬主機來解決。
1. 修改hosts文件
2. 修改server.xml文件
3. 為每個department創建webapps目錄
詳細細節:
1. 修改hosts文件
據自己目前的網絡知識,像我們平時上網,當發出www.baidu.com的請求時,該域名會被www的DNS解析成對應的IP,之后就能定位到baidu的主機,進而建立連接進行訪問。
如果真有類似“一套Tomcat來處理多個域名請求”的需求,那么首先應該保證各個域名會被解析成同一個IP。
在這里,為代替DNS的域名解析,暫時修改hosts文件,用來處理各個department的域名。
hosts文件位置:
Windows 7 x64: C:\Windows\System32\drivers\etc
Linux CentOS 7: /etc
假設兩個域名:www.tomcatvirtualhost1.com ; www.tomcatvirtualhost2.com
在hosts文件中增加以下內容,Tomcat Server IP 為真實的IP.
Tomcat Server IP www.tomcatvirtualhost1.com
Tomcat Server IP www.tomcatvirtualhost2.com
2. 修改server.xml文件
修改tomcat中conf下的server.xml文件(使用apache-tomcat-8.5.4)。
在server.xml文件中,有以下默認的<Host>。 name="localhost" appBase="webapps"。name對應域名,appBase對應tomcat下的應用文件夾。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
所以增加以下兩個<Host>標簽:
修改name和appBase
<Host name="www.tomcatvirtualhost1.com" appBase="department1" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="www.tomcatvirtualhost2.com" appBase="department2" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
3. 為每個department創建webapps目錄
既然server.xml文件中已經增加了2個appBase,所以在tomcat目錄下相應創建文件夾 department1 和 department2。為簡化,可以復制webapps。
4. 測試
啟動Tomcat,瀏覽器鍵入www.tomcatvirtualhost1.com:8080,這將訪問department1;瀏覽器鍵入www.tomcatvirtualhost2.com:8080,這將訪問department2。
POST: 后續研究下怎么把端口號也去掉(修改默認端口的方式感覺不好),看着別扭。。。
Done!