Tomcat7做爲Servlet/JSP容器,它的所有行爲的配置指令,包含在/conf/server.xml文件中,這個文件是一個無預約義結構的XML文件,全部的屬性大小寫敏感。javascript
全部的系統屬性變量都配置在catalina.properties文件中。
全部的配置元素分爲如下主要幾類:css
Server是整個配置文件的根元素。html
Service表明了一組Connectors,這些Connectors關聯到同一個引擎Engine。java
Connectors表明了外部客戶端請求(並接收響應)到一個特定的Service的接口。web
Containers表明了處理請求和併產生響應的組件。apache
Engine引擎爲Service處理全部請求;而Host爲特定的虛擬主機處理全部請求;Context爲特定的web應用處理全部請求。tomcat
Nested Components,內置組件,表明能夠內置到Container的元素。一些元素能夠內置到任何Container中,而一些只能內置到Context中。服務器
Server表明整個Catalina servlet容器,因此在server.xml文件中,只能有一個Server元素。cookie
className:這個類必須是org.apache.catalina.Server的實現類,若是沒有指定類名,則使用標準實現。
address:這是等待關閉命令的TCP/IP地址,若是沒有指定,默認使用localhost。
port:這個端口是用於接收關閉服務的端口,能夠設置爲-1來禁用。
shutdown:這個命令字符串必須經過TCP/IP端口接收,才能關閉Tomcat。網絡
Service - 一個或多個Service元素。
GlobalNamingResources - 配置Server的JNDI全局資源。
Service元素是一個或多個Connector組件的結合體,這些Connector共享一個單獨的用於處理請求的Engine組件。一個或多個Service可能內置在一個Server元素中。
className:這個類必須是org.apache.catalina.Service的實現類。
name:Service的展現名稱,若是使用標準的Catalina組件,這個名稱會包含在日誌信息中。同一個Server下的每一個Service的名稱必須惟一。
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。若是爲負值,線程不會被從新建立。
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。
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表明處理與Service關聯的整個請求處理機制。它從一個或多個Connector接收並處理所有請求,並返回完整的響應信息給Connector,最終返回到客戶端。
Engine元素必須嵌入在Service元素內。
defaultHost:默認的主機名,它必須指向一個Host元素的name屬性。
name:Engine的邏輯名稱,用於日誌和錯誤信息。若是在一個Server中使用多個Service元素,每一個Engine必須使用惟一的名稱。
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。
Tomcatd的集羣實現提供了session複製、Context屬性複製、和集羣範圍的WAR包部署。
然而集羣配置是至關複雜的,默認的配置對於大多數人是開箱可用的。