一、需求和解決思路:
在項(xiàng)目經(jīng)驗(yàn)中,,主機(jī)的TCP協(xié)議(HTTP協(xié)議是基于TCP/IP協(xié)議)的80端口是稀缺資源,,很多情況下不可能為一個(gè)應(yīng)用而去申請(qǐng)一臺(tái)主機(jī)(不管是物理主機(jī)還是虛擬服務(wù)器)。這時(shí)候很多的Java Web應(yīng)用會(huì)放到一個(gè)擁有TCP的80端口的Tomcat下面,,由于每個(gè)應(yīng)用都要有自己的域名地址(這里域名后面肯定不能有端口),,所以需要我們配置該Tomcat來支持一個(gè)IP對(duì)應(yīng)多個(gè)域名,,甚至一個(gè)應(yīng)用對(duì)應(yīng)多個(gè)域名,。
二,、具體解決方案和步驟:
在開源社區(qū)里,一般我們會(huì)用linux+tomcat來部署JavaEE應(yīng)用,,這里我們的生產(chǎn)環(huán)境也是如此,,但是我們可以在Windows的開發(fā)環(huán)境下完成上述需求。這里我們已經(jīng)有一個(gè)安裝好的Tomcat6.0,并且在tomcat目錄下自行建立了一個(gè)webapps2目錄,,在webapps和webapps2目錄下非別都放置了一個(gè)測(cè)試項(xiàng)目“6”和“7”,。兩個(gè)項(xiàng)目的web.xml中均配置了:
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- </welcome-file-list>
配置虛擬主機(jī)和URL重寫的具體流程如下:
1.修改tomcat 6.0的默認(rèn)訪問端口(在conf目錄的server.xml中),將8080改為80,。
原始:
- <Connector URIEncoding="UTF-8"
- acceptCount="100"
- connectionTimeout="20000"
- disableUploadTimeout="true"
- enableLookups="false"
- maxHttpHeaderSize="8192"
- maxSpareThreads="75"
- maxThreads="150"
- minSpareThreads="25"
- port="8080"
- redirectPort="8443" />
修改后:
- <Connector URIEncoding="UTF-8"
- acceptCount="100"
- connectionTimeout="20000"
- disableUploadTimeout="true"
- enableLookups="false"
- maxHttpHeaderSize="8192"
- maxSpareThreads="75"
- maxThreads="150"
- minSpareThreads="25"
- port="80"
- redirectPort="8443" />
這里需要做一個(gè)測(cè)試,,啟動(dòng)tomcat,看本機(jī)的80端口是否被占用,。如果不能正常啟動(dòng),需要查看80端口使用情況(使用netstat -anp|grep 80命令來查找占用80端口的進(jìn)程),,并結(jié)束占用TCP協(xié)議的80端口的進(jìn)程(kill - 9 "2016" ),。
2.修改tomcat 6.0的虛擬主機(jī)配置(在conf目錄的server.xml中)。
原始:
- <Engine name="Catalina" defaultHost="localhost">
- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" />
- </Engine>
修改后:
- <Engine name="Catalina" defaultHost="www.">
- <Host name="www." appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- </Host>
- <Host name="www." appBase="webapps2"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- </Host>
- </Engine>
這里解釋一下上面的配置: 1).Engine的dafaultHost:表示訪問該tomcat默認(rèn)進(jìn)入的主機(jī),注意一定不能是localhost,不然別人通過你的ip訪問,就會(huì)默認(rèn)進(jìn)入tomcat的管理界面. 2).Host的name:表示該主機(jī)綁定的域名,如果綁定localhost則可以通過在瀏覽器中輸入localhost訪問該Host. 3).Host的appBase:表示該主機(jī)綁定的文件存放路徑,可以使用相對(duì)路徑或絕對(duì)路徑.
按照上面的配置: 1).如果我在瀏覽器中輸入http://localhost 則訪問%TOMCAT_HOME%/webapps/ROOT下的網(wǎng)站 2).如果輸入http://www. 則訪問 %TOMCAT_HOME%/webapps/ROOT 下的網(wǎng)站 3).如果輸入http://www. 則訪問%TOMCAT_HOME%/webapps2/ROOT 下的網(wǎng)站.
3.修改tomcat 6.0的url重寫配置(在conf目錄的server.xml中),。
修改后:
- <Engine name="Catalina" defaultHost="www.">
- <Host name="www." appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- <Context path="" reloadable="true"
- docBase="/6"
- workDir="" />
- </Host>
- <Host name="www." appBase="webapps2"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- <Context path="" reloadable="true"
- docBase="/7"
- workDir="" />
- </Host>
<context>是Host標(biāo)記的子元素,,表示一個(gè)虛擬目錄,它主要有兩個(gè)屬性,,path就相當(dāng)于虛擬目錄名字,,而docbase則是具體的文件位置。docBase可以是絕對(duì)路徑也可以是相對(duì)路徑,,本文中使用相對(duì)路徑,。
4. 如果想要一個(gè)應(yīng)用而綁定多個(gè)域名的方法,例如可以通過 http://www./或者http:///都能夠訪問webapps2目錄下的目錄名稱為“7”的工程,。那么需要這樣配置:
- <Engine name="Catalina" defaultHost="www.">
- <Host name="www." appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- <Context path="" reloadable="true"
- docBase="6"
- workDir="" />
- </Host>
- <Host name="www." appBase="webapps2"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- <Alias>www.</Alias>
- <Alias></Alias>
- <Context path="" reloadable="true"
- docBase="7"
- workDir="" />
- </Host>
- </Engine>
這里只是增加了Alias屬性,。
5.修改系統(tǒng)的windows系統(tǒng)的C:\Windows\System32\drivers\etc目錄下的hosts文件。進(jìn)行虛擬的DNS映射,。這里用文本編輯器打開hosts文件,,在最后增加如下配置并保存:
- 127.0.0.1 www.
- 127.0.0.1 www.
- 127.0.0.1
這時(shí)就可以通過 http://www./訪問webapps2目錄下的目錄名稱為“6”的工程,通過 http://www./或者http:///訪問webapps2目錄下的目錄名稱為“7”的工程了,。
注意:
配置hosts文件完成后,,如果不能生效,必要時(shí)需重啟系統(tǒng),。
參考:
1.《Tomcat綁定多個(gè)IP地址多域名綁定》
|