tomcat的Server.xml詳解和Host的配置


基於以下說法的領悟:

若只配appBase,不配Context 的docBase(appBase和docBase二選一就可以了),則appBase的每個文件夾里都代表一個應用,每個應用都必須放ROOT文件夾,ROOT里則包含web所有文件,如圖:

 

<host appBase="d:/aaa">
<Context path="/smswap" reloadable="true" docBase="D:\workspace\smswap\WebRoot"></Context>
</host>

我們先看appBase,這個目錄表示:
1 這個目錄下面的子目錄將自動被部署為應用。
2 這個目錄下面的.war文件將被自動解壓縮並部署為應用

而docBase只是指向了你某個應用的目錄,這個可以和appBase沒有任何關系。

總結:
如果你想自己指定路徑,那么應該在docBase里面
如果你想簡單,那么直接把他們復制到appBase下面就行了

如果你把他們弄重復了,也就是2個指向了一個目錄,看上去也能運行,但你的應用下面的每個子目錄,其實是被部署為單獨的應用的。
比如你的應用為

myApp, 放在了
d:\project\myApp
里面有2個子目錄
d:\project\myApp\images
d:\project\myApp\js

你可以通過
1 設置 appBase 指向 d:\project 來讓系統自動部署
2 你可以手工指定docBase到 d:\project\myApp
3 如果你指定了 appBase到 d:\project\myApp 那么
d:\project\myApp\images這個將不再是普通的子目錄,而是一個單獨的虛擬目錄,或者叫應用了。因為其被自動部署

d:\project\myApp\js 也一樣的后果

 

 

 

 

 

---------------------------------------------------------分割線--------------------------------------------------------

 

轉自:http://www.cnblogs.com/gentoo/archive/2012/10/13/2722463.html

 

4、認識 Tomcat 的主配置文件 server.xml

 

這個文件位於 tomcat 6 安裝目錄之下的 conf 目錄之內,實際內容位於 /etc/tomcat6/server.xml。

正如該文件的擴展名所示,這是一個 xml 格式的文件,打開之后將會看到如下的結構:

[html]  view plain  copy
 
 
 
 
  1. <Server port="8005" shutdown="SHUTDOWN">  
  2.     <Service name="Catalina">  
  3.         <Executor ...... />  
  4.         <Connector ...... />  
  5.         <Connector ...... />  
  6.         <Engine name="Catalina" ... >  
  7.             <Host name="localhost" ... >  
  8.                 <Context ... />  
  9.             </Host>  
  10.         </Engine>  
  11.     </Service>  
  12. </Server>  

 

 

即一個由 Server->Service->Engine->Host->Context 組成的四層結構,從里層向外層分別是:

  • Context: 即 Web 應用程序,一個 Context 即對於一個 Web 應用程序。
  • Host:即虛擬主機,比如 www.dog.com 對應一個虛擬主機,api.dog.com 對於另一個虛擬主機。一個 Host 用於定義一個虛擬主機。(所謂的”一個虛擬主機”可簡單理解為”一個網站”)
  • Engine:一組虛擬主機的集合。比如www.dog.com 和 api.dog.com 可以組成一組虛擬主機集合。
  • Service:一組 Engine 的集合,包括線程池 Executor 和連接器 Connector 的定義。

CONNECTOR 的配置

一個 Connector 即一個對外界開放的端口,簡單理解就是大部分網絡服務程序都會遇到的 IpAddress:Port 的組合,比如 192.168.0.10:8080 就是一個端口,當然在 Connector 里可以定義的內容要豐富得多,即 Connector 這個 XML 節點里可以加上許多屬性。下面列舉一下常用的:

  • enableLookups:(default=true) 是否允許反向解析訪客的IP地址,當你的應用程序使用 request.getRemoteHost() 時如果只需要IP地址,建議禁用此項,這樣能節省反向域名解析的時間。
  • maxPostSize:(default=2097152 即2MB) 最大允許 POST 上傳的數據大小(單位為:字節),對於一般網站來說,比如有寫評論寫文章的網站,默認的2MB已經足夠,不過如果網站帶有圖片甚至文件上傳功能,則需要根據具體情況來定。
  • protocol:連接器的類型,tomcat 6 有如下幾種選擇
    • org.apache.coyote.http11.Http11Protocol:簡寫為 “HTTP/1.1″,這是默認的連接器,一個訪客網絡連接需要一個線程,並發性能比較低。
    • org.apache.coyote.http11.Http11NioProtocol:NIO連接器,一個由非阻塞的socket工作模式構成的連接器,並發性能良好,純Java實現。
    • org.apache.coyote.http11.Http11AprProtocol:APR連接器,所謂 APR 就是網絡上最多服務器使用的 Web 服務程序 Apache Http Server 所使用的庫,Tomcat 建議在生產環境使用,具體方法下面會介紹。
  • redirectPort:當用戶訪問非https的資源而該資源又需要https方式訪問時,tomcat會自動重定向到https端口,一般https使用 TCP 443端口,所以一般取值”443″。
  • SSLEnabled:(default=false),設置當前連接器是否使用安全SSL傳輸,如果設置為”true”,則應該同時設置下面兩個屬性: scheme=”https” (default=http) 可以設置為 http 或者 https。 secure=”true” (default=false)。
  • adress:連接器所綁定的IP地址,當一台服務器存在多個ip地址時可以指定其中的需要綁定的一個,默認不設置該屬性的值表示綁定當前服務器的所有ip地址。
  • compressableMimeType:(default=”text/html,text/xml,text/plain”) 指定需要GZIP壓縮的資源的類型。
  • compression:(default=off) 是否啟用GZIP壓縮,可以取值 on/off/force,設置為on之后會對 compressableMimeType 屬性指定的資源類型啟用GZIP壓縮。
  • connectionTimeout:(default=”60000″) 當訪客網絡連接后,服務器等待第一行Request頭出現的時間。單位是毫秒。
  • executor:指定當前連接器使用的線程池的名稱,如果指定,則忽略其他針對線程數量的設置,比如 maxThreads。
  • maxThreads:(default=200) 最多可創建線程的數量。
  • port=”80″:綁定端口。
  • keepAliveTimeout:(default=connectionTimeout),訪客完成一次請求后維持網絡連接的時間。

一個簡單的 Connector 定義如下:

[html]  view plain  copy
 
 
 
 
  1. <Connector port="80" protocol="HTTP/1.1"  
  2.                connectionTimeout="60000"  
  3.            redirectPort="443" />  

EXECUTOR 的配置

Executor 用於定義共享的線程池。默認情況下每個 Connector 都會產生自己的一個線程池,如果你想多個 Connector 共享一個線程池,則可以先定義一個線程池,如:

[html]  view plain  copy
 
 
 
 
  1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  
  2.         maxThreads="150" minSpareThreads="4"/>  
  3. 然后修改上述的 Connector 配置,增加 executor 屬性,修改后的配置如下:  
  4.   
  5. <Connector executor="tomcatThreadPool"  
  6.                port="80" protocol="HTTP/1.1"  
  7.                connectionTimeout="60000"  
  8.                redirectPort="443" />  

HOST 的配置

一個 Host 配置即為一個虛擬主機,例如下面是一個簡單的 Host 配置:

[html]  view plain  copy
 
 
 
 
  1. <Host name="localhost"  appBase="webapps"  
  2.             unpackWARs="true" autoDeploy="true">  
  3.         <Alias>dog.com</Alias>  
  4.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"    
  5.                prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>  
  6. </Host>  

 

Host 配置節點各個屬性的作用:

  • name:設置虛擬主機的域名,比如 localhost 表示本機名稱,實際應用時應該填寫具體域名,比如 www.dog.com 或者 dog.com,當然如果該虛擬主機是給內部人員訪問的,也可以直接填寫服務器的 ip 地址,比如 192.168.1.10。
  • autoDeploy:是否允許自動部署,默認值是 true,即表示 Tomcat 會自動檢測 appBase 目錄下面的文件變化從而自動應用到正在運行的 Web 應用程序。
  • unpackWARs:設置是否自動展開 war 壓縮包再運行 Web 應用程序,默認值是 true。
  • appBase:設置 Web 應用程序組的路徑。前面說過一個虛擬主機可以由多個 Web 應用程序構成,所以這里的 appBase 所指向的目錄應該是准備用於存放這一組 Web 應用程序的目錄,而不是具體某個 Web 應用程序的目錄本身(即使該虛擬主機只由一個 Web 應用程序組成)。appBase 屬性的值可以是相對於 Tomcat 安裝目錄的相對路徑,也可以是絕對路徑,需要注意的是該路徑必須是 Tomcat 有權限訪問的,通過 Arch Linux 源安裝的 Tomcat 是通過 tomcat 用戶運行的,因此創建一個新的 appBase 目錄之后可以使用 chown 命令更改目錄的所有者。

下面舉例說明如何創建一個新的虛擬主機 www.dog.com:

在目錄 /var/lib/tomcat6 下面可以看到安裝 Tomcat 時默認創建的 webapps 目錄,為了方便管理我們即將創建的虛擬主機的文檔也在 /var/lib/tomcat6 里創建:

$ sudo mkdir dog

然后在 dog 目錄里面創建目錄 ROOT,再在 ROOT 里面創建文件 index.html(內容隨便)。

現在將目錄的所有者和所有組都更改為 tomcat:

$ sudo chown -R tomcat:tomcat dog

然后在 server.xml 的 Host 節點下增加如下 Host 節點:

[html]  view plain  copy
 
 
 
 
  1. <Host name="www.dog.com"  appBase="/var/lib/tomcat6/dog">  
  2. </Host>  

 

重啟 Tomcat 服務就可以在瀏覽器里通過地址 http://www.dog.com 訪問這個新創建的虛擬主機了,當然你必須要先在 /etc/hosts 文件里增加 www.dog.com 到 127.0.0.1 的解析記錄,如下:

127.0.0.1    www.dog.com

有時一個虛擬主機可能會同時綁定多個域名,比如 www.dog.com 和 dog.com,這時可以通過在 Host 配置節點里增加 Alias 實現,比如:

[xml]  view plain  copy
 
 
 
 
  1. <span style="margin:0px;padding:0px;"><span style="margin:0px;padding:0px;"><Alias<span style="margin:0px;padding:0px;">></span></span></span>dog.com<span style="margin:0px;padding:0px;"><span style="margin:0px;padding:0px;"></Alias<span style="margin:0px;padding:0px;">></span></span></span>  

另外上面示例當中的 <Valve className=… /> 配置了訪客的訪問日志的儲存位置以及文件名。

ENGINE 的配置

默認的 Engine 節點如下:

[html]  view plain  copy
 
 
 
 
  1. <Engine name="Catalina" defaultHost="localhost">  
  2. </Engine>  

 

這個應該不用展開敘述了,其中 defaultHost 用於指定訪客在沒有相應的虛擬主機時,Tomcat 默認選擇的虛擬主機的名稱。考慮如下的情形:

假如有3個域名都 DNS 解析到你的服務器,比如 dog.com, www.dog.com, api.dog.com,當前你只配置了虛擬主機 dog.com 和 www.dog.com,那么當有個訪客通過 api.dog.com 訪問你的服務器時,Tomcat 就會依據 defaultHost 的設置返回其中一個虛擬主機運行的結果。實際應用中 defaultHost 應該設置為你的主力域名,比如 www.dog.com。

5、多站點的配置:設置多個HOST節點

有時我們需要在一台服務器上跑多個站點,通過 Tomcat 很容易實現這點,下面假設我們要搭建 www.dog.com 和 www.cat.com 這兩個站點。

首先要確定你的兩個域名的 DNS 已經能正確解析到你的服務器,因為這里我們是做實驗,所以可以在本機添加域名解析。修改 /etc/hosts 文件,加入如下兩行:

127.0.0.1    www.cat.com
127.0.0.1    www.dog.com

然后在 /var/lib/tomcat6 目錄里分別創建名字為 cat 和 dog 的兩個目錄,然后在每個目錄里都創建名字為 ROOT 的目錄,並在 ROOT 里面創建名字為 index.html 文件(內容隨便)。然后將目錄 cat 和 dog 的所有者和所有組都更改為 tomcat,方法參考上一節,這里不再贅述。

現在編輯 Tomcat 的主配置文件 server.xml,在默認的 Host 節點下面再加入如下兩個新的 Host 節點:

[html]  view plain  copy
 
 
 
 
  1. <Host name="www.dog.com" appBase="/var/lib/tomcat6/dog" autoDeploy="true" unpackWARs="true">  
  2. </Host>  
  3. <Host name="www.cat.com" appBase="/var/lib/tomcat6/cat" autoDeploy="true" unpackWARs="true">  
  4. </Host>  

在 Host 節點里面可以根據上一節的說明加入自己需要的屬性或者 Alias 和 Value 子節點。重啟 Tomcat 服務,現在應該可以在瀏覽器里分別通過 http://www.dog.com 和 http://www.cat.com 瀏覽這兩個站點了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM