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- <Server port="8005" shutdown="SHUTDOWN">
- <Service name="Catalina">
- <Executor ...... />
- <Connector ...... />
- <Connector ...... />
- <Engine name="Catalina" ... >
- <Host name="localhost" ... >
- <Context ... />
- </Host>
- </Engine>
- </Service>
- </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- <Connector port="80" protocol="HTTP/1.1"
- connectionTimeout="60000"
- redirectPort="443" />
EXECUTOR 的配置
Executor 用於定義共享的執行緒池。預設情況下每個 Connector 都會產生自己的一個執行緒池,如果你想多個 Connector 共享一個執行緒池,則可以先定義一個執行緒池,如:
[html] view plain copy- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
- maxThreads="150" minSpareThreads="4"/>
- 然後修改上述的 Connector 配置,增加 executor 屬性,修改後的配置如下:
- <Connector executor="tomcatThreadPool"
- port="80" protocol="HTTP/1.1"
- connectionTimeout="60000"
- redirectPort="443" />
HOST 的配置
一個 Host 配置即為一個虛擬主機,例如下面是一個簡單的 Host 配置:
[html] view plain copy- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true">
- <Alias>dog.com</Alias>
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
- prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
- </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- <Host name="www.dog.com" appBase="/var/lib/tomcat6/dog">
- </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- <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- <Engine name="Catalina" defaultHost="localhost">
- </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- <Host name="www.dog.com" appBase="/var/lib/tomcat6/dog" autoDeploy="true" unpackWARs="true">
- </Host>
- <Host name="www.cat.com" appBase="/var/lib/tomcat6/cat" autoDeploy="true" unpackWARs="true">
- </Host>
在 Host 節點裡面可以根據上一節的說明加入自己需要的屬性或者 Alias 和 Value 子節點。重啟 Tomcat 服務,現在應該可以在瀏覽器裡分別通過 http://www.dog.com 和 http://www.cat.com 瀏覽這兩個站點了。