概覽
Tomcat7作為Servlet/JSP容器,它的全部行為的配置指令,包含在/conf/server.xml檔案中,這個檔案是一個無預定義結構的XML檔案,所有的屬性大小寫敏感。
所有的系統屬性變數都配置在catalina.properties檔案中。
所有的配置元素分為以下主要幾類:
-
Server是整個配置檔案的根元素。
-
Service代表了一組Connectors,這些Connectors關聯到同一個引擎Engine。
-
Connectors代表了外部客戶端請求(並接收響應)到一個特定的Service的介面。
-
Containers代表了處理請求和併產生響應的元件。
-
Engine引擎為Service處理所有請求;而Host為特定的虛擬主機處理所有請求;Context為特定的web應用處理所有請求。
-
Nested Components,內建元件,代表可以內建到Container的元素。一些元素可以內建到任何Container中,而一些只能內建到Context中。
Server
Server代表整個Catalina servlet容器,所以在server.xml檔案中,只能有一個Server元素。
屬性說明
className:這個類必須是org.apache.catalina.Server的實現類,如果沒有指定類名,則使用標準實現。
address:這是等待關閉命令的TCP/IP地址,如果沒有指定,預設使用localhost。
port:這個埠是用於接收關閉服務的埠,可以設定為-1來禁用。
shutdown:這個命令字串必須通過TCP/IP埠接收,才能關閉Tomcat。
內建的元件
-
Service – 一個或多個Service元素。
-
GlobalNamingResources – 配置Server的JNDI全域性資源。
Service
Service元素是一個或多個Connector元件的結合體,這些Connector共享一個單獨的用於處理請求的Engine元件。一個或多個Service可能內建在一個Server元素中。
屬性說明
-
className:這個類必須是org.apache.catalina.Service的實現類。
-
name:Service的展示名稱,如果使用標準的Catalina元件,這個名稱會包含在日誌資訊中。同一個Server下的每個Service的名稱必須唯一。
Executor 執行緒池
Executor代表一個可以在Tomcat各元件中共享的執行緒池。每個Connector可以建立一個執行緒池,但是可以在Connector以及其他元件之間共享,只要那些元件配置之後支援Executor。
Executor必須實現org.apache.catalina.Executor類。
Executor是Service的內建元素。為了供Connector挑選,在server.xml檔案中,Executor元素需要出現在Connector前面。
屬性說明
-
className:必須是org.apache.catalina.Executor的實現類,預設值為org.apache.catalina.core.StandardThreadExecutor。
-
name:名稱,要求唯一。
-
threadPriority:Executor執行緒優先順序,預設為常量Thread.NORM_PRIORITY(5)。
-
daemon:執行緒是否應該為守護執行緒,預設為true。
-
namePrefix:Executor建立的執行緒名稱的字首,每個執行緒名稱為namePrefix+執行緒編號。
-
maxThreads:執行緒池最大活躍執行緒數量,預設200。
-
minSpareThreads:一直保持存活的最低執行緒數量,預設25。
-
maxIdleTime:執行緒超時時間,單位毫秒。執行緒閒置時間超過這個數值會被關閉,除非活躍執行緒數量低於或等於minSpareThreads。預設值為60000ms(即1分鐘)。
-
maxQueueSize:等待執行的任務佇列的最大值,預設為整型最大值Integer.MAX_VALUE。
-
prestartminSpareThreads:是否預啟動空閒執行緒(minSpareThreads)。在Executor啟動時,是否啟動minSpareThreads。預設為false。
-
threadRenewalDelay:如果配置了元件ThreadLocalLeakPreventionListener(防止ThreadLocal洩露的監聽器),它會通知Executor停止Context環境。如果Context停了,池裡的執行緒會重新建立。為了避免所有的執行緒同時重新建立,這個選項設定了任意兩個執行緒建立之間的延遲時間。單位毫秒ms,預設1000ms。如果為負值,執行緒不會被重新建立。
Connectors
Http Connector
Http Connector是支援HTTP/1.1協議的Connector元件。它使Catalina變成一個單機Web伺服器,並且使他可以執行Servlet和JSP。這個元件的一個特殊例項監聽著伺服器的一個特定的TCP埠。
每個傳入的請求都會申請一個執行緒。如果多個請求同時進入,並且超過了當前可用執行緒數量,就會建立更多的執行緒,直到達到配置的最大執行緒數量。如果還有更多的同時請求,這些請求會被堆積在Connector建立的server socket中,直到最大值(acceptCount屬性)。任何更多的請求會收到”connection refused”錯誤,直到有可用的資源。
公共屬性
-
allowTrace:是否允許TRACE HTTP方法,預設false。
-
asyncTimeout:非同步請求超時時間,單位毫秒,預設10000ms(10秒)。
-
enableLookups:如果想使用request.getRemoteHost()方法通過DNS查詢遠端請求客戶端的真實的主機名,則設定為true。設定為false會跳過DNS查詢,直接返回IP地址。DNS查詢預設禁用。
-
maxHeaderCount:一個請求允許最大的請求頭數量。如果超出限制請求會被拒絕。如果為負值,無限制。預設值100。
-
maxParameterCount:GET和POST請求的引數(和值)的最大數量,超出的引數會被忽略。如果是0或者小於0,表示無限制。預設為10000。
-
maxPostSize:POST請求的最大位元組數。如果為負,無限制。預設2097152位元組(即2Mb)。
-
maxSavePostSize:POST請求的最大儲存/緩衝位元組數。-1表示無限制,0表示禁用儲存/緩衝,預設為4096位元組(4Kb)。
-
port:TCP埠,用於建立Server socket並等待進入連線。作業系統允許1個伺服器監聽1個IP的1個指定埠。如果值為0,Tomcat會為這個Connector選擇一個隨機的空閒埠。
-
protocol:通訊協議。預設為HTTP/1.1,這個協議使用自動切換機制來選擇阻塞式基於Java的Connector或者基於APR/native的Connector。如果要使用明確的協議,而不是自動切換機制選擇的協議,可以選擇下面的值:
-
org.apache.coyote.http11.Http11Protocol – 阻塞 Java connector
-
org.apache.coyote.http11.Http11NioProtocol – 非阻塞 Java connector
-
org.apache.coyote.http11.Http11AprProtocol – APR/native connector.
也支援自定義的實現。
-
-
proxyName:如果當前Connector使用代理配置,使用這個屬性指定Server名稱。這個Server名稱,可以呼叫request.getServerName()方法返回。
-
proxyPort:指定代理的Server埠。
-
redirectPort:如果當前Connector不支援SSL請求,但是收到的請求匹配web.xml中配置的security-constraint選項,要求使用SSL埠,那麼Catalina會自動把請求轉發到這個指定埠。
-
scheme:給當前協議設定一個名字,這樣可以通過request.getScheme()方法獲得協議名詞,比如給SSL協議取名HTTPS。預設值為http。
URIEncoding:字元編碼。用於URI位元組解碼,和URL %xx部分資料的解碼。預設為ISO-8859-1。 -
useIPVHosts:將該屬性設定為true會導致Tomcat使用收到請求的IP地址,來決定將請求傳送到哪個主機。預設false。
標準實現屬性
除了上面列出的常見的聯結器屬性,標準的HTTP聯結器(BIO,NIO和APR/native)都支援以下屬性。
-
acceptCount:當所有的可用執行緒都在使用中,傳入連線請求佇列的最大長度。當佇列滿時,任何請求都會被拒絕。預設100。
-
address:如果伺服器有多個IP,這個屬性指定使用哪個IP地址用於監聽埠。預設使用與伺服器關聯的全部IP地址。
-
compressableMimeType:HTTP壓縮的後設資料型別,引數可以使用逗號間隔。預設為text/html,text/xml,text/plain,text/css,text/javascript,application/javascript。
-
compression:為了節省伺服器頻寬,Connector可以使用HTTP/1.1 GZIP壓縮。
-
on:允許壓縮,這回引起文字資料被壓縮。
-
off:禁用壓縮。
-
force:強制在所有情況下壓縮。
-
某整數:壓縮前的最小位元組量,否則不壓縮。
預設為false。
-
-
compressionMinSize:當compression設定為on,指定壓縮前的最小資料量。預設為2048。
-
connectionTimeout:連線超時時間。-1表示無限制。預設值60000ms(60秒)。但server.xml預設配置為20000。
-
disableUploadTimeout:是否禁用上傳超時時間,開啟後,上傳資料的連線使用單獨的超時時間。
-
connectionUploadTimeout:上傳資料時,連線超時時間。
-
executor:指向Executor元素的引用。如果設定了這個元屬性,並且對應的Executor存在,Connector將使用這個Executor,而其他所有執行緒相關屬性將被忽略。如果未指定此屬性,Connector會使用一個私有的、內部Executor來提供執行緒池。
-
executorTerminationTimeoutMillis:在關閉Connector之前,那個私有的、內部Executor等待請求處理執行緒的終結的超時時間。BIO Connector預設值為0ms。NIO和APR/native Connector預設值為5000ms。
-
keepAliveTimeout:長連線超時時間。Connector在關閉連線之前,會等待另一個HTTP請求的時間。預設值是connectionTimeout的屬性值。-1無超時時間。
-
maxKeepAliveRequests:HTTP請求最大長連線數量。如果值為1,禁用長連線。設為-1,無限制。預設值為100。
-
maxConnections:在任何給定的時間伺服器接收並處理的最大連線數。當這個數字已經達到了,伺服器將不會接受任何連線,直到連線的數量降到低於此值。基於acceptCount,作業系統可能仍然接收連線。
-
maxHttpHeaderSize:請求頭和響應頭的最大位元組數。預設8192(8Kb)
-
maxThreads:最多同時處理的請求的最大執行緒數量,這決定了同時處理請求的最大數量。預設200。
-
minSpareThreads:最小空閒執行緒數量。預設10。
-
socketBuffer:Socket輸出緩衝區大小。單位位元組。-1表示禁用緩衝區。預設值9000位元組。
-
SSLEnabled:是否開啟SSL加密傳輸。需要配置secure和scheme屬性。
特殊功能
-
代理支援:如果Tomcat執行在一個代理伺服器後面時,可以使用proxyName和proxyPort屬性。
-
SSL支援:通過設定SSLEnabled為true來開啟SSL支援。同時要設定scheme為https,設定secure為true,來傳遞正確的資訊到servlet。
Containers
Context
Context元素代表一個Web應用,此Web應用執行在一個特定的虛擬主機中。每個Web應用都基於WAR檔案或者對應的解壓縮檔案目錄。
你可以定義多個Context元素,每個Context必須在虛擬主機內有一個唯一的名稱,但Context路徑不需要是唯一的。一個Context名稱必須用0長度的字串,作為虛擬主機預設的Web應用,用於處理其他與Context路徑不匹配的請求。
屬性
-
cookies:是否使用cookie,可以通過cookie鑑別session。預設true。設定為false,則無法使用cookie完成session鑑證,然後必須依賴於URL重寫。
-
docBase:應用程式檔案的根目錄。如果應用程式不在Host元素的appBase路徑下,需要設定此屬性。
-
path:應用程式的訪問路徑(context path)。
-
reloadable:自動重新載入class和jar檔案。設定為true,Catalina會監視/WEB-INF/classes/ 和/WEB-INF/lib目錄下的變動,如果檢測到變動就會自動重新載入應用程式。此功能非常有用但是不建議在生產環境使用。
特殊功能
-
Access Log:訪問日誌。可以要求Catalina為Engine、Host或Context處理的請求建立訪問日誌,通過在這些元素中新增Valve元素,如下面這段配置:
<Context>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="localhost_access_log." suffix=".txt"
pattern="common"/>
...
</Context>
PS:是Valve元素,不是Value。
Engine
Engine代表處理與Service關聯的整個請求處理機制。它從一個或多個Connector接收並處理全部請求,並返回完整的響應資訊給Connector,最終返回到客戶端。
Engine元素必須嵌入在Service元素內。
屬性
-
defaultHost:預設的主機名,它必須指向一個Host元素的name屬性。
-
name:Engine的邏輯名稱,用於日誌和錯誤資訊。如果在一個Server中使用多個Service元素,每個Engine必須使用唯一的名稱。
Host
Host代表一個虛擬主機,它關聯了一個Tomcat伺服器正在執行的的網路名稱(如www.xxx.com)。很多情況下,系統管理員會關聯多個域名到這個虛擬主機和應用上。
Host都是嵌入到Engine元素中的,可以配置多個。在Host元素中,可以為嵌入Web應用的Context資訊,並關聯到這個虛擬主機。
每個Engine中必須有一個Host名稱來匹配Engine的defaultHost屬性,即必須有一個Host作為Engine的預設主機。
屬性
appBase:虛擬主機的應用程式根路徑。這是個檔案路徑名,包含了部署到虛擬主機的應用程式。可以指定為一個絕對路徑,或者關聯到$CATALINA_BASE目錄的相對路徑。預設值為”webapps”。
name:一般是虛擬主機註冊到DNS的網路名稱。必須有一個Host的name作為Engine的defaultHost。
Cluster
Tomcatd的叢集實現提供了session複製、Context屬性複製、和叢集範圍的WAR包部署。
然而叢集配置是相當複雜的,預設的配置對於大多數人是開箱可用的。