HTTP 連接器

目錄

簡介

HTTP 連接器元素表示支援 HTTP/1.1 協定的連接器元件。除了執行 servlet 和 JSP 頁面外,它還能讓 Catalina 作為獨立的網路伺服器運作。此元件的特定執行個體會在伺服器上特定 TCP 埠號上偵聽連線。一個或多個此類連接器可以組態為單一 服務 的一部分,每個連接器都轉發到關聯的 引擎 來執行要求處理並建立回應。

如果您想組態用於透過 AJP 協定連線到網路伺服器的連接器(例如 Apache 1.3 的 mod_jk 1.2.x 連接器),請參閱 AJP 連接器 文件。

每個傳入的非同步請求都需要一個執行緒來執行該請求。如果收到的同時請求多於目前可用的請求處理執行緒所能處理的數量,系統將建立額外的執行緒,直到達到組態的最大值(maxThreads 屬性的值)。如果仍收到更多同時請求,Tomcat 會接受新的連線,直到目前的連線數達到 maxConnections。連線會排隊在連接器建立的伺服器 socket 內部,直到有執行緒可處理連線。達到 maxConnections 後,作業系統會排隊後續的連線。作業系統提供的連線排隊大小可以透過 acceptCount 屬性控制。如果作業系統排隊已滿,後續的連線要求可能會被拒絕或逾時。

屬性

一般屬性

連接器的所有實作都支援下列屬性

屬性 說明
allowBackslash

如果此為 true,則會允許 '\' 字元作為路徑分隔符號。

如果未指定,則會使用預設值 false

allowTrace

布林值,可用於啟用或停用 TRACE HTTP 方法。如果未指定,此屬性會設為 false。根據 RFC 7231 第 4.3.8 節,cookie 和授權標頭將會從 TRACE 要求的回應中排除。如果您想要包含這些標頭,您可以實作目標 Servlet 的 doTrace() 方法,並完全控制回應。

asyncTimeout

非同步要求的預設逾時時間(毫秒)。如果未指定,此屬性會設為 Servlet 規格預設值 30000(30 秒)。

discardFacades

布林值,可用於啟用或停用隔離容器內部要求處理物件的門面物件的回收。如果設為 true,門面會在每次要求後設定為垃圾收集,否則會重複使用。當安全管理員啟用時,此設定不會產生任何效果。如果未指定,此屬性會設為 true

enableLookups

如果要讓對 request.getRemoteHost() 的呼叫執行 DNS 查詢以傳回遠端客戶端的實際主機名稱,請設為 true。設為 false 以略過 DNS 查詢,並以字串形式傳回 IP 位址(從而提升效能)。預設情況下,DNS 查詢會停用。

encodedSolidusHandling

設為 reject 時,包含 %2f 順序的要求路徑會以 400 回應遭到拒絕。設為 decode 時,包含 %2f 順序的要求路徑會在解碼其他 %nn 順序的同時將該順序解碼為 /。設為 passthrough 時,包含 %2f 順序的要求路徑會在 %2f 順序不變的情況下進行處理。如果未指定,預設值為 reject

enforceEncodingInGetWriter

如果此為 true,則在未指定字元編碼的情況下呼叫 Response.getWriter() 會導致後續呼叫 Response.getCharacterEncoding() 傳回 ISO-8859-1,而 Content-Type 回應標頭會包含 charset=ISO-8859-1 元件。(SRV.15.2.22.1)

如果未指定,將使用符合預設規格的 true 值。

maxCookieCount

要求允許的最大 Cookie 數目。小於 0 的值表示沒有限制。如果未指定,將使用預設值 200。

maxParameterCount

從查詢字串取得的要求參數總數上限(包括上傳的檔案),以及對於 POST 要求,如果內容類型為 application/x-www-form-urlencodedmultipart/form-data,則為要求主體。超過此限制的要求參數將被忽略。小於 0 的值表示沒有限制。如果未指定,將使用預設值 10000。請注意,FailedRequestFilter 篩選器 可用於拒絕超過限制的要求。

maxPostSize

容器 FORM URL 參數剖析將處理的 POST 的最大位元組大小。可以透過將此屬性設定為小於 0 的值來停用限制。如果未指定,此屬性將設定為 2097152 (2 MiB)。請注意,FailedRequestFilter 可用於拒絕超過此限制的要求。

maxSavePostSize

容器在 FORM 或 CLIENT-CERT 驗證期間或 HTTP/1.1 升級期間將儲存/緩衝的要求主體的最大位元組大小。對於這兩種驗證類型,要求主體將在使用者驗證之前儲存/緩衝。對於 CLIENT-CERT 驗證,要求主體會在 SSL 交握期間緩衝,並在處理要求時清空緩衝區。對於 FORM 驗證,POST 會在使用者重新導向到登入表單時儲存,並保留到使用者成功驗證或與驗證要求相關聯的階段逾期為止。對於 HTTP/1.1 升級,要求主體會在升級程序期間緩衝。可以透過將此屬性設定為 -1 來停用限制。將屬性設定為 0 將停用在驗證和 HTTP/1.1 升級期間儲存要求主體資料。如果未指定,此屬性將設定為 4096 (4 千位元組)。

parseBodyMethods

使用 application/x-www-form-urlencoded 的要求主體將與 POST 相同方式剖析為要求參數的 HTTP 方法的逗號分隔清單。這對於想要支援 PUT 要求的 POST 風格語意的 RESTful 應用程式很有用。請注意,除了 POST 之外的任何設定都會導致 Tomcat 以違反 servlet 規格意圖的方式運作。根據 HTTP 規格,HTTP 方法 TRACE 在此特別禁止。預設值為 POST

連接器將建立伺服器套接字並等待傳入連線的 TCP 埠號。您的作業系統只允許一個伺服器應用程式偵聽特定 IP 位址上的特定埠號。如果使用特殊值 0(零),則 Tomcat 會隨機選取一個可用埠供此連接器使用。這通常只適用於嵌入式和測試應用程式。

通訊協定

設定處理傳入流量的通訊協定。預設值為 HTTP/1.1,它使用基於 Java NIO 的連接器。
若要使用明確的通訊協定,可以使用下列值
org.apache.coyote.http11.Http11NioProtocol - 非封鎖 Java NIO 連接器
org.apache.coyote.http11.Http11Nio2Protocol - 非封鎖 Java NIO2 連接器
也可以使用自訂實作。
查看我們的 連接器比較 圖表。Java 連接器的組態對於 http 和 https 都是相同的。

proxyName

如果此連接器用於代理組態,請設定此屬性以指定要為對 request.getServerName() 的呼叫傳回的伺服器名稱。如需更多資訊,請參閱 代理支援

proxyPort

如果此連接器用於代理組態,請設定此屬性以指定要為對 request.getServerPort() 的呼叫傳回的伺服器埠。如需更多資訊,請參閱 代理支援

redirectPort

如果此連接器支援非 SSL 要求,且收到一個要求,而對應的 <security-constraint> 需要 SSL 傳輸,Catalina 會自動將要求重新導向至在此指定的埠號。

rejectSuspiciousURIs

如果 URI 與 Servlet 6.0 規格識別的可疑 URI 模式之一相符,此連接器是否應拒絕要求?預設值為 false

scheme

將此屬性設定為您希望對 request.getScheme() 的呼叫傳回的通訊協定名稱。例如,對於 SSL 連接器,您會將此屬性設定為「https」。預設值為「http」。

secure

如果您希望對 request.isSecure() 的呼叫傳回 true 以取得此連接器收到的要求,請將此屬性設定為 true。您會希望在 SSL 連接器或從 SSL 加速器(例如加密卡、SSL 設備甚至網路伺服器)接收資料的非 SSL 連接器上使用此設定。預設值為 false

URIEncoding

這指定在對 URL 進行 %xx 解碼後,用於解碼 URI 位元組的字元編碼。預設值為 UTF-8

useBodyEncodingForURI

這指定是否應將 contentType 中指定的編碼用於 URI 查詢參數,而不是使用 URIEncoding。此設定存在於與 Tomcat 4.1.x 的相容性中,其中 contentType 中指定的編碼或使用 Request.setCharacterEncoding 方法明確設定的編碼也用於 URL 中的參數。預設值為 false

備註: 1) 此設定僅套用於要求的查詢字串。與 URIEncoding 不同,它不會影響要求 URI 的路徑部分。2) 如果不知道要求字元編碼(瀏覽器未提供,且未透過 SetCharacterEncodingFilter 或使用 Request.setCharacterEncoding 方法的類似篩選器設定),預設編碼永遠是「ISO-8859-1」。URIEncoding 設定對此預設值沒有影響。

useIPVHosts

將此屬性設定為 true,讓 Tomcat 使用接收要求的 IP 位址,來決定將要求傳送至哪個主機。預設值為 false

xpoweredBy

將此屬性設定為 true,讓 Tomcat 使用規格中建議的標頭,宣傳對 Servlet 規格的支持。預設值為 false

標準實作

標準 HTTP 連接器(NIO 和 NIO2)除了上面列出的常見連接器屬性之外,還支援以下屬性。

屬性 說明
acceptCount

maxConnections 已達上限時,作業系統提供的傳入連線要求佇列的最大長度。作業系統可能會略過此設定,並使用不同大小的佇列。當此佇列已滿時,作業系統可能會主動拒絕其他連線,或讓這些連線逾時。預設值為 100。

acceptorThreadPriority

接收器執行緒的優先順序。用於接受新連線的執行緒。預設值為 5java.lang.Thread.NORM_PRIORITY 常數的值)。請參閱 java.lang.Thread 類別的 JavaDoc,以進一步了解此優先順序的意義。

address

對於有多個 IP 位址的伺服器,此屬性會指定哪個位址將用於監聽指定的埠。預設情況下,連接器會監聽所有本機位址。除非使用系統屬性以其他方式設定 JVM,否則當使用 0.0.0.0:: 設定時,基於 Java 的連接器(NIO、NIO2)會同時監聽 IPv4 和 IPv6 位址。

allowHostHeaderMismatch

預設情況下,Tomcat 會拒絕在要求列中指定主機,但在主機標頭中指定不同主機的要求。可以透過將此屬性設定為 true 來停用此檢查。如果未指定,預設值為 false
此設定將從 Tomcat 11 開始移除,屆時它將硬式編碼為 false

allowedTrailerHeaders

預設情況下,Tomcat 在處理分塊輸入時會忽略所有尾端標頭。若要處理標頭,必須將其新增到此以逗號分隔的標頭名稱清單中。

bindOnInit

控制連接器使用的 socket 何時繫結。如果設為 true,則在連接器啟動時繫結,在連接器銷毀時解除繫結。如果設為 false,則在連接器啟動時繫結,在連接器停止時解除繫結。如果未指定,預設值為 true

clientCertProvider

當客戶端憑證資訊以 java.security.cert.X509Certificate 以外的形式呈現時,需要在使用前轉換,而此屬性控制用於執行轉換的 JSSE 提供者。

compressibleMimeType

值是 MIME 類型的逗號分隔清單,可對其使用 HTTP 壓縮。預設值為 text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml 。如果您明確指定類型,則會覆寫預設值。

compression

連接器可能會使用 HTTP/1.1 GZIP 壓縮來嘗試節省伺服器頻寬。參數的可接受值為「off」(停用壓縮)、「on」(允許壓縮,這會導致文字資料被壓縮)、「force」(在所有情況下強制壓縮)或數字整數值(等於「on」,但指定輸出在壓縮前的資料最小量)。如果內容長度未知,且壓縮設為「on」或更激進,則輸出也會被壓縮。如果未指定,此屬性會設為「off」。

注意:使用壓縮(節省您的頻寬)和使用 sendfile 功能(節省您的 CPU 週期)之間存在權衡。如果連接器支援 sendfile 功能,例如 NIO 連接器,則使用 sendfile 將優先於壓縮。症狀是,大於 48 KiB 的靜態檔案將會以未壓縮的方式傳送。您可以透過設定連接器的 useSendfile 屬性來關閉 sendfile,如下所述,或在預設的 conf/web.xml 或 Web 應用程式的 web.xml 中變更 DefaultServlet 中的 sendfile 使用門檻值。

compressionMinSize

如果將壓縮設為「開啟」,則此屬性可用於指定在輸出壓縮之前資料的最小量。如果未指定,此屬性預設為「2048」。單位為位元組。

connectionLinger

連接器使用的 Socket 在關閉時會延遲的秒數。預設值為 -1,會停用 Socket 延遲。

connectionTimeout

連接器在接受連線後會等待請求 URI 行顯示的毫秒數。使用 -1 表示沒有 (即無限) 超時。預設值為 60000 (即 60 秒),但請注意,隨 Tomcat 附帶的標準 server.xml 將其設為 20000 (即 20 秒)。除非將 disableUploadTimeout 設為 false,否則此超時也會用於讀取請求主體 (如果有)。

connectionUploadTimeout

指定在資料上傳進行中的超時時間 (毫秒)。這只會在將 disableUploadTimeout 設為 false 時生效。

continueResponseTiming

何時對包含 Expect: 100-continue 標頭的請求回應 100 中間回應代碼。可以使用下列值

  • immediately - 中間 100 狀態回應會盡快傳回
  • onRead - 中間 100 狀態回應只會在 Servlet 讀取請求主體時傳回,允許 Servlet 檢查標頭,並有可能在使用者代理傳送可能很大的請求主體之前回應。

defaultSSLHostConfigName

預設SSLHostConfig 的名稱,如果客戶端連線未提供 SNI,或提供了 SNI 但與任何已設定的SSLHostConfig 不符,則會用於安全連線 (如果此連接器已設定為安全連線)。如果未指定,將使用預設值 _default_。提供的值總是轉換為小寫。

disableUploadTimeout

此旗標允許 Servlet 容器在資料上傳期間使用不同的、通常較長的連線超時。如果未指定,此屬性會設為 true,會停用此較長的超時。

executor

一個連結器元素中名稱的參考。執行器如果設定這個屬性,且存在已命名的執行器,連結器將會使用執行器,並且會忽略所有其他執行緒屬性。請注意,如果未為連結器指定共用執行器,則連結器將會使用私有內部執行器來提供執行緒池。

executorTerminationTimeoutMillis

在繼續停止連結器的程序之前,私有內部執行器將等待請求處理執行緒終止的時間。如果未設定,預設值為 5000(5 秒)。

keepAliveTimeout

連結器在關閉連線之前等待另一個 HTTP 請求的毫秒數。預設值是使用已設定為connectionTimeout屬性的值。使用 -1 的值表示沒有(即無限)逾時。

maxConnections

伺服器在任何特定時間接受和處理的最大連線數。當達到這個數目時,伺服器會接受,但不會處理另一個連線。這個額外的連線會被封鎖,直到正在處理的連線數低於maxConnections,此時伺服器將開始再次接受和處理新的連線。請注意,一旦達到限制,作業系統仍可能會根據 acceptCount 設定接受連線。預設值為 8192

僅限於 NIO/NIO2,將值設定為 -1,將會停用 maxConnections 功能,且不會計算連線。

maxExtensionSize

限制分塊 HTTP 請求中分塊延伸的總長度。如果值為 -1,則不會施加限制。如果未指定,則會使用預設值 8192

maxHeaderCount

容器允許請求中的最大標頭數。包含比指定限制更多標頭的請求將會被拒絕。小於 0 的值表示沒有限制。如果未指定,則使用預設值 100。

maxHttpHeaderSize

提供 maxHttpRequestHeaderSizemaxHttpResponseHeaderSize 的預設值。如果未指定,則此屬性設定為 8192(8 KiB)。

maxHttpRequestHeaderSize

以位元組為單位,指定與 HTTP 請求相關的請求行和標頭的最大允許大小。這會與接收到的位元組數進行比較,因此包括換行符號和空白,以及請求行、標頭名稱和標頭值。如果未指定,則此屬性設定為 maxHttpHeaderSize 屬性的值。

如果您看到「要求標頭過大」的錯誤,您可以增加此值,但請注意 Tomcat 會為每個要求分配您指定的完整數量。例如,如果您指定 1 MB 的 maxHttpRequestHeaderSize,而您的應用程式處理 100 個同時進行的要求,您將看到 100 MB 的堆積消耗在要求標頭中。

maxHttpResponseHeaderSize

以位元組為單位指定的 HTTP 回應關聯回應列和標頭的最大允許大小。這會與寫入的位元組數進行比較,因此包括換行符號和空白,以及狀態列、標頭名稱和標頭值。如果未指定,這個屬性會設為 maxHttpHeaderSize 屬性的值。

maxKeepAliveRequests

在伺服器關閉連線之前,可以串接的最大 HTTP 要求數。將此屬性設為 1 會停用 HTTP/1.0 保持連線,以及 HTTP/1.1 保持連線和串接。將此設為 -1 會允許串接或保持連線的 HTTP 要求數量不受限制。如果未指定,這個屬性會設為 100。

maxSwallowSize

對於中止上傳,Tomcat 會吞入的最大要求主體位元組數(不含傳輸編碼開銷)。中止上傳是指 Tomcat 知道要求主體會被忽略,但用戶端仍傳送它。如果 Tomcat 沒有吞入主體,用戶端不太可能看到回應。如果未指定,會使用預設值 2097152(2 MiB)。小於零的值表示不應強制執行限制。

maxThreads

由這個 Connector 建立的最大請求處理執行緒數目,因此決定可以同時處理的最大請求數目。如果未指定,此屬性會設定為 200。如果執行器與這個 connector 關聯,這個屬性會被忽略,因為 connector 會使用執行器而不是內部執行緒池來執行工作。請注意,如果執行器已設定,任何為這個屬性設定的值都會正確記錄,但會報告為 -1(例如透過 JMX),以清楚說明它未被使用。

maxTrailerSize

限制分塊 HTTP 請求最後一個區塊中尾端標頭的總長度。如果值為 -1,則不會施加限制。如果未指定,將使用預設值 8192

minSpareThreads

持續執行執行緒的最小數目。這包括活動和閒置執行緒。如果未指定,將使用預設值 10。如果執行器與這個 connector 關聯,這個屬性會被忽略,因為 connector 會使用執行器而不是內部執行緒池來執行工作。請注意,如果執行器已設定,任何為這個屬性設定的值都會正確記錄,但會報告為 -1(例如透過 JMX),以清楚說明它未被使用。

noCompressionUserAgents

這個值是一個正規表示式(使用 java.util.regex),用於比對 HTTP 用戶端 user-agent 標頭,這些用戶端不應使用壓縮,因為這些用戶端雖然宣稱支援這個功能,但實作卻有問題。預設值是一個空字串(停用正規表示式比對)。

processorCache

通訊協定處理常式會快取 Processor 物件以加速效能。這個設定決定要快取多少個這些物件。-1 表示無限,預設值為 200。如果不使用 Servlet 3.0 非同步處理,一個好的預設值是使用與 maxThreads 設定相同的數值。如果使用 Servlet 3.0 非同步處理,一個好的預設值是使用 maxThreads 和預期同時請求的最大數目(同步和非同步)中較大的那個數值。

rejectIllegalHeader

如果收到包含非法標頭名稱或值的 HTTP 請求(例如標頭名稱不是一個代號),這個設定會決定請求是否會被拒絕並傳回 400 回應(true),或者非法標頭是否會被忽略(false)。預設值為 true,這會導致請求被拒絕。
此設定將在 Tomcat 11 之後移除,屆時將硬編碼為 true

relaxedPathChars

HTTP/1.1 規範 要求在 URI 路徑中使用時,某些字元必須編碼為 %nn。很遺憾,許多使用者代理程式(包括所有主流瀏覽器)都不符合此規範,並以未編碼的形式使用這些字元。為避免 Tomcat 拒絕此類要求,此屬性可用於指定要允許的其他字元。如果未指定,則不允許任何其他字元。值可以是下列字元的任意組合:" < > [ \ ] ^ ` { | }。值中存在的任何其他字元都將被忽略。

relaxedQueryChars

HTTP/1.1 規範 要求在 URI 查詢字串中使用時,某些字元必須編碼為 %nn。很遺憾,許多使用者代理程式(包括所有主流瀏覽器)都不符合此規範,並以未編碼的形式使用這些字元。為避免 Tomcat 拒絕此類要求,此屬性可用於指定要允許的其他字元。如果未指定,則不允許任何其他字元。值可以是下列字元的任意組合:" < > [ \ ] ^ ` { | }。值中存在的任何其他字元都將被忽略。

restrictedUserAgents

值是一個正規表示式(使用 java.util.regex),用於比對 HTTP 1.1 或 HTTP 1.0 連線不應使用的 HTTP 客戶端 user-agent 標頭,即使客戶端宣告支援這些功能。預設值為空字串(停用正規表示式比對)。

server

覆寫 HTTP 回應的 Server 標頭。如果設定,此屬性的值會覆寫網頁應用程式設定的任何 Server 標頭。如果未設定,則會使用應用程式指定的任何值。如果應用程式未指定值,則不設定 Server 標頭。

serverRemoveAppProvidedValues

如果為 true,則網頁應用程式設定的任何 Server 標頭都將被移除。請注意,如果設定了 server,則此屬性實際上會被忽略。如果未設定,則會使用預設值 false

SSLEnabled

使用此屬性在連接器上啟用 SSL 流量。若要在連接器上開啟 SSL 握手/加密/解密,請將此值設定為 true。預設值為 false。當將此值設為 true 時,您會希望設定 schemesecure 屬性,以將正確的 request.getScheme()request.isSecure() 值傳遞給 servlet。有關更多資訊,請參閱 SSL 支援

tcpNoDelay

如果設為 true,將在伺服器 socket 上設定 TCP_NO_DELAY 選項,這在大部分情況下會提升效能。預設設為 true

threadPriority

JVM 中要求處理執行緒的優先順序。預設值為 5java.lang.Thread.NORM_PRIORITY 常數的值)。請參閱 java.lang.Thread 類別的 JavaDoc 以進一步了解此優先順序的意義。如果執行緒與此連接器關聯,此屬性將被忽略,因為連接器將使用執行緒而非內部執行緒池來執行工作。請注意,如果設定執行緒,此屬性設定的任何值都會正確記錄,但會報告為 -1(例如透過 JMX),以清楚說明它並未被使用。

threadsMaxIdleTime

如果執行緒池中的執行緒多於 minSpareThreads,執行緒池將保留執行緒的毫秒數。如果未指定,將使用預設的 60000 毫秒。如果執行緒與此連接器關聯,此屬性將被忽略,因為連接器將使用執行緒而非內部執行緒池來執行工作。請注意,如果設定執行緒,此屬性設定的任何值都會正確記錄,但會報告為 -1(例如透過 JMX),以清楚說明它並未被使用。

throwOnFailure

如果連接器在生命週期轉換期間遇到例外,是否應重新擲回或記錄例外?如果未指定,將使用預設的 false。請注意,預設值可以透過 org.apache.catalina.startup.EXIT_ON_INIT_FAILURE 系統屬性來變更。

useAsyncIO

(布林值)使用此屬性來啟用或停用非同步 IO API 的使用。預設值為 true

useKeepAliveResponseHeader

(布林值)使用此屬性來啟用或停用 Keep-Alive HTTP 回應標頭的加入,如 此網際網路草案 所述。預設值為 true

useVirtualThreads

(布林值)使用此屬性來啟用或停用內部執行緒的虛擬執行緒使用。如果執行緒與此連接器關聯,此屬性將被忽略。預設值為 false

Java TCP socket 屬性

NIO 和 NIO2 實作支援下列 Java TCP socket 屬性,以及上面所列的通用 Connector 和 HTTP 屬性。

屬性 說明
socket.rxBufSize

(int)socket 接收緩衝區 (SO_RCVBUF) 大小(以位元組為單位)。如果未設定,則使用 JVM 預設值。

socket.txBufSize

(int)socket 傳送緩衝區 (SO_SNDBUF) 大小(以位元組為單位)。如果未設定,則使用 JVM 預設值。如果明確設定此值,請小心。在某些 JVM 上,如果值小於 ~8k,效能會非常差。

socket.tcpNoDelay

(bool)這等於標準屬性 tcpNoDelay

socket.soKeepAlive

(bool)socket 保持連線設定 (SO_KEEPALIVE) 的布林值。如果未設定,則使用 JVM 預設值。

socket.ooBInline

(bool)socket OOBINLINE 設定的布林值。如果未設定,則使用 JVM 預設值。

socket.soReuseAddress

(bool)socket 重複使用位址選項 (SO_REUSEADDR) 的布林值。如果未設定,則使用 JVM 預設值。

socket.soLingerOn

(bool)socket 延遲選項 (SO_LINGER) 的布林值。標準屬性 connectionLinger 的值如果 >=0,則等於將此設定為 true。標準屬性 connectionLinger 的值如果 <0,則等於將此設定為 false。此屬性和 soLingerTime 都必須設定,否則將同時使用 JVM 預設值。

socket.soLingerTime

(int)socket 延遲選項 (SO_LINGER) 的值(以秒為單位)。這等於標準屬性 connectionLinger。此屬性和 soLingerOn 都必須設定,否則將同時使用 JVM 預設值。

socket.soTimeout

這等於標準屬性 connectionTimeout

socket.performanceConnectionTime

(int)效能設定的第一個值。請參閱 Socket 效能選項。所有三個效能屬性都必須設定,否則將同時使用 JVM 預設值。

socket.performanceLatency

(int)效能設定的第二個值。請參閱Socket 效能選項。所有三個效能屬性都必須設定,否則 JVM 預設值將用於所有三個屬性。

socket.performanceBandwidth

(int)效能設定的第三個值。請參閱Socket 效能選項。所有三個效能屬性都必須設定,否則 JVM 預設值將用於所有三個屬性。

socket.unlockTimeout

(int) Socket 解鎖的逾時時間。當連接器停止時,它會嘗試透過開啟連接器本身來釋放接收器執行緒。預設值為 250,單位為毫秒

NIO 特定組態

下列屬性是 NIO 連接器專用的。

屬性 說明
pollerThreadPriority

(int)輪詢器執行緒的優先順序。預設值為 5java.lang.Thread.NORM_PRIORITY 常數的值)。有關此優先順序的意義,請參閱 java.lang.Thread 類別的 JavaDoc。

selectorTimeout

(int)輪詢器在 select() 上逾時的毫秒數。此值很重要,因為連線清除是在同一個執行緒上執行,因此請勿將此值設定得過高。預設值為 1000 毫秒。

useSendfile

(bool)使用此屬性來啟用或停用 sendfile 功能。預設值為 true。請注意,使用 sendfile 會停用 Tomcat 可能對回應執行的任何壓縮。

socket.directBuffer

(bool)布林值,表示是否使用直接 ByteBuffers 或 Java 對應的 ByteBuffers。如果為 true,則使用 java.nio.ByteBuffer.allocateDirect() 來配置緩衝區;如果為 false,則使用 java.nio.ByteBuffer.allocate()。預設值為 false
當您使用直接緩衝區時,請務必為直接記憶體空間配置適當的記憶體量。在 Sun 的 JDK 上,這類似於 -XX:MaxDirectMemorySize=256m

socket.directSslBuffer

(bool)布林值,表示是否為 SSL 緩衝區使用直接 ByteBuffers 或 Java 對應的 ByteBuffers。如果為 true,則使用 java.nio.ByteBuffer.allocateDirect() 來配置緩衝區;如果為 false,則使用 java.nio.ByteBuffer.allocate()。預設值為 false
當您使用直接緩衝區時,請務必為直接記憶體空間配置適當的記憶體量。在 Oracle 的 JDK 上,這類似於 -XX:MaxDirectMemorySize=256m

socket.appReadBufSize

(int)在 Tomcat 中開啟的每個連線都與一個讀取 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此讀取緩衝區大小為 8192 位元組。對於較低的並行性,您可以將其增加以緩衝更多資料。對於大量的保持連線,請減少此數字或增加堆積大小。

socket.appWriteBufSize

(int)在 Tomcat 中開啟的每個連線都與一個寫入 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此寫入緩衝區大小為 8192 位元組。對於較低的並行性,您可以將其增加以緩衝更多回應資料。對於大量的保持連線,請減少此數字或增加堆積大小。
此處的預設值相當低,如果您沒有處理數萬個並行連線,您應該將其提高。

socket.bufferPool

(int)NIOx 連接器使用一個名為 NioXChannel 的類別,該類別包含連結到 socket 的元素。為了減少垃圾收集,NIOx 連接器會快取這些通道物件。此值指定此快取的大小。預設值為 -2。特殊值為 -1 表示快取不限、0 表示不快取,以及 -2 表示使用 bufferPoolSize 屬性計算的值。

socket.bufferPoolSize

NioXChannel 池也可以基於大小,而不是基於使用的物件。如果 bufferPool 不為 -2,則不會使用此值。
此值以位元組為單位,特殊值除外。特殊值為 -1 表示快取不限、0 表示不快取,以及 -2 表示計算如下:
NioXChannel 緩衝區大小 = 讀取緩衝區大小 + 寫入緩衝區大小
SecureNioXChannel 緩衝區大小 = 應用程式讀取緩衝區大小 + 應用程式寫入緩衝區大小 + 最大 SNI 解析大小的兩倍。如果執行時期報告的最大記憶體大於 1GB,則池大小值為記憶體除以緩衝區大小。否則,它將為 0。

socket.processorCache

(int)Tomcat 將快取 SocketProcessor 物件以減少垃圾收集。整數值指定最多在快取中保留多少個物件。預設值為 0。特殊值為 -1 表示快取不限和 0 表示不快取。

socket.eventCache

(int)Tomcat 將快取 PollerEvent 物件以減少垃圾收集。整數值指定最多在快取中保留多少個物件。預設值為 0。特殊值為 -1 表示快取不限和 0 表示不快取。

unixDomainSocketPath

在受支援的情況下,這是此 連接器將建立並等待連線進來的 Unix Domain Socket 的路徑。當指定此路徑時,否則強制性的 port 屬性可以省略。有關更多資訊,請參閱 Unix Domain Socket 支援

unixDomainSocketPathPermissions

如果支援,將套用在上面以 unixDomainSocketPath 指定的 Unix Domain Socket 的 posix 權限。這些權限指定為九個字元的字串,分成三組,每組三個字元:(r)ead、(w)rite 和 e(x)ecute,分別針對擁有者、群組和其他人。如果未授予權限,則使用連字號。如果未指定,權限預設為 rw-rw-rw-

useInheritedChannel

(布林值)定義此連接器是否應繼承 inetd/systemd 網路 Socket。只有一個連接器可以繼承網路 Socket。此選項可用於在連線要求傳送到 systemd 超級守護程序的連接埠後自動啟動 Tomcat。預設值為 false。有關更多詳細資料,請參閱 java.nio.channels.spi.SelectorProvider 類別的 JavaDoc。

NIO2 特定組態

下列屬性特定於 NIO2 連接器。

屬性 說明
useSendfile

(bool)使用此屬性來啟用或停用 sendfile 功能。預設值為 true。請注意,使用 sendfile 會停用 Tomcat 可能對回應執行的任何壓縮。

socket.directBuffer

(bool)布林值,表示是否使用直接 ByteBuffers 或 Java 對應的 ByteBuffers。如果為 true,則使用 java.nio.ByteBuffer.allocateDirect() 來配置緩衝區;如果為 false,則使用 java.nio.ByteBuffer.allocate()。預設值為 false
當您使用直接緩衝區時,請務必為直接記憶體空間配置適當的記憶體量。在 Sun 的 JDK 上,這類似於 -XX:MaxDirectMemorySize=256m

socket.directSslBuffer

(bool)布林值,表示是否為 SSL 緩衝區使用直接 ByteBuffers 或 Java 對應的 ByteBuffers。如果為 true,則使用 java.nio.ByteBuffer.allocateDirect() 來配置緩衝區;如果為 false,則使用 java.nio.ByteBuffer.allocate()。預設值為 false
當您使用直接緩衝區時,請務必為直接記憶體空間配置適當的記憶體量。在 Oracle 的 JDK 上,這類似於 -XX:MaxDirectMemorySize=256m

socket.appReadBufSize

(int)在 Tomcat 中開啟的每個連線都與一個讀取 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此讀取緩衝區大小為 8192 位元組。對於較低的並行性,您可以將其增加以緩衝更多資料。對於大量的保持連線,請減少此數字或增加堆積大小。

socket.appWriteBufSize

(int)在 Tomcat 中開啟的每個連線都與一個寫入 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此寫入緩衝區大小為 8192 位元組。對於較低的並行性,您可以將其增加以緩衝更多回應資料。對於大量的保持連線,請減少此數字或增加堆積大小。
此處的預設值相當低,如果您沒有處理數萬個並行連線,您應該將其提高。

socket.bufferPool

(整數)NIO2 連接器使用稱為 Nio2Channel 的類別,其中包含連結到 Socket 的元素。為減少垃圾收集,NIO2 連接器會快取這些頻道物件。此值指定此快取的大小。預設值為 500,表示快取會保留 500 個 Nio2Channel 物件。其他值包括 -1 表示無限制快取,以及 0 表示不快取。

socket.processorCache

(整數)Tomcat 會快取 SocketProcessor 物件以減少垃圾收集。整數值指定最多在快取中保留多少個物件。預設值為 0。其他值包括 -1 表示無限制快取,以及 0 表示不快取。

巢狀元件

Tomcat 支援伺服器名稱指示 (SNI)。這允許將多個 SSL 組態與單一安全連接器關聯,其中用於任何特定連線的組態是由客戶端要求的主機名稱所決定。為簡化此程序,已新增 SSLHostConfig 元素,可用於定義其中一個組態。任何數量的 SSLHostConfig 都可以嵌套在 Connector 中。同時,已新增支援,讓多個憑證可以與單一 SSLHostConfig 關聯。因此,每個 SSL 憑證都會在 SSLHostConfig 中的 Certificate 元素中進行組態。有關更多詳細資料,請參閱下列的 SSL 支援區段。

當 OpenSSL 提供 TLS 實作時,可以在 OpenSSLConf 元素內嵌套一個或多個 OpenSSLConfCmd 元素,以透過 OpenSSL 的 SSL_CONF API 來組態 OpenSSL。單一 OpenSSLConf 元素可以嵌套在 SSLHostConfig 元素中。有關更多詳細資料,請參閱下列的 SSL 支援區段

特殊功能

HTTP/1.1 和 HTTP/1.0 支援

連接器支援 HTTP/1.1 協定的所有必要功能,如 RFC 7230-7235 所述,包括持續連線、管線、預期和分塊編碼。如果客戶端僅支援 HTTP/1.0 或 HTTP/0.9,連接器也會優雅地回退以支援此協定。不需要任何特殊設定即可啟用此支援。連接器也支援 HTTP/1.0 保持連線。

RFC 7230 要求 HTTP 伺服器總是從他們聲稱支援的最高 HTTP 版本開始回應。因此,此連接器將在回應的開頭總是傳回 HTTP/1.1

HTTP/2 支援

HTTP/2 支援提供給 TLS (h2)、非 TLS 經由 HTTP 升級 (h2c) 和直接 HTTP/2 (h2c) 連線。若要為 HTTP 連接器啟用 HTTP/2 支援,以下升級協定元素必須嵌套在連接器中,且類別名稱屬性為 org.apache.coyote.http2.Http2Protocol

<Connector ... >
  <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>

有其他設定屬性可用。有關詳細資訊,請參閱HTTP/2 升級協定文件。

代理支援

當 Tomcat 在代理伺服器後方執行時,可以使用 proxyNameproxyPort 屬性。這些屬性會修改傳回給呼叫 request.getServerName()request.getServerPort() 方法的網路應用程式的值,這些方法通常用於建構重新導向的絕對 URL。如果不設定這些屬性,傳回的值會反映接收代理伺服器連線的伺服器名稱和埠,而不是客戶端將原始要求導向的伺服器名稱和埠。

有關更多資訊,請參閱代理支援操作指南

Unix 域 Socket 支援

當使用 unixDomainSocketPath 屬性時,支援 Unix Domain Socket 的連接器會繫結到給定路徑的 socket。

對於 Java 16 和更高版本使用者,支援在 NIO 連接器中提供。

socket 路徑會建立具有所有使用者讀取和寫入權限。若要保護此 socket,請將其放置在具有適當權限的目錄中,並適當地設定以限制存取。或者,在支援 posix 權限的平台上,可以使用 unixDomainSocketPathPermissions 選項直接設定 socket 的權限。

Tomcat 會在伺服器關閉時自動移除 socket。如果 socket 已存在,啟動會失敗。管理員必須在驗證 socket 尚未被現有的 Tomcat 程序使用後,小心地移除 socket。

可以使用 curl 命令列客戶端的 --unix-socket 選項和 Apache HTTP 伺服器的 mod_proxy 模組中的 Unix Domain Socket 支援來存取 Unix Domain Socket。

SSL 支援

您可以透過將 SSLEnabled 屬性設定為 true,為此 Connector 的特定執行個體啟用 SSL 支援。

您還需要將 schemesecure 屬性分別設定為 httpstrue,以傳遞正確資訊給 servlets。

NIO 和 NIO2 connectors 使用 JSSE Java SSL 實作或 OpenSSL 實作。在可行的情況下,JSSE 和 OpenSSL 都使用常見的組態屬性。

每個安全 connector 都必須定義至少一個 SSLHostConfigSSLHostConfig 元素的名稱必須是唯一的,其中一個必須與 ConnectordefaultSSLHostConfigName 屬性相符。

每個 SSLHostConfig 都必須反過來定義至少一個 CertificateCertificate 的類型必須是唯一的。

除了 Servlet 規範第 3.10 節中定義的標準 TLS 相關要求屬性之外,Tomcat 還支援許多其他 TLS 相關屬性。完整清單可以在 SSLSupport Javadoc 中找到。

如需更多資訊,請參閱 SSL 組態操作指南

SSL 支援 - SSLHostConfig

屬性 說明
certificateRevocationListFile

包含憑證授權機構的串接憑證撤銷清單之檔案名稱。格式為 PEM 編碼。如果未定義,則不會根據憑證撤銷清單檢查用戶端憑證(除非使用基於 OpenSSL 的 connector 且定義了 certificateRevocationListPath)。相對路徑會根據 $CATALINA_BASE 解析。基於 JSSE 的 connector 也可為此屬性指定 URL。

certificateRevocationListPath

僅限 OpenSSL。

包含憑證授權機構的憑證撤銷清單之目錄名稱。格式為 PEM 編碼。相對路徑會根據 $CATALINA_BASE 解析。

certificateVerification

如果您希望 SSL 堆疊在接受連線之前要求用戶端提供有效的憑證鏈,請設定為 required。如果您希望 SSL 堆疊要求用戶端憑證,但如果沒有提供憑證,則不會失敗,請設定為 optional。如果您希望用戶端憑證為選用,而且您不希望 Tomcat 根據受信任 CA 清單來檢查它們,請設定為 optionalNoCA。如果 TLS 提供者不支援此選項(OpenSSL 支援,JSSE 不支援),則會將其視為已指定 optional。如果已設定 optionalNoCA,則 OCSP 也會停用。none 值(為預設值)不會要求憑證鏈,除非用戶端要求受使用 CLIENT-CERT 驗證的安全約束保護的資源。

certificateVerificationDepth

驗證用戶端憑證時允許的最大中間憑證數目。如果未指定,則會使用預設值 10。

caCertificateFile

僅限 OpenSSL。

包含受信任憑證授權機構的串接憑證之檔案名稱。格式為 PEM 編碼。

caCertificatePath

僅限 OpenSSL。

包含受信任憑證授權機構的憑證之目錄名稱。格式為 PEM 編碼。

ciphers

使用 OpenSSL 語法啟用的密碼。 (請參閱 OpenSSL 文件以取得支援的密碼清單和語法)。或者,可以使用標準 OpenSSL 密碼名稱或標準 JSSE 密碼名稱的逗號分隔密碼清單。

不同版本的 OpenSSL 可能對相同的密碼字串有不同的詮釋。例如,CCM8 密碼已在 OpenSSL 3.2 中從 HIGH 移至 MEDIUM。不論使用哪個 OpenSSL 或 JSSE 版本,Tomcat 都會將提供的密碼值轉換為與最新 OpenSSL 開發分支一致的密碼清單。然後,此密碼清單會傳遞給 SSL 實作。

僅會使用 SSL 實作支援的密碼。當 Connector 啟動時,任何從非預設密碼字串衍生的密碼,且不受 SSL 實作支援,都會記錄在 WARNING 訊息中。可透過提供已設定的 SSL 實作支援的明確密碼清單,來避免此警告。

如果未指定,將使用預設值 (使用 OpenSSL 表示法) HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA

請注意,預設情況下,定義密碼的順序會視為偏好順序。請參閱 honorCipherOrder

disableCompression

僅限 OpenSSL。

設定是否停用壓縮。預設值為 true。如果使用的 OpenSSL 版本不支援停用壓縮,則會使用該 OpenSSL 版本的預設值。

disableSessionTickets

僅限 OpenSSL。

如果設定為 true,則停用 TLS 會話票證 (RFC 5077)。預設值為 false。請注意,當 TLS 會話票證正在使用中時,完整的對等憑證鏈只會在第一次連線時可用。後續連線 (使用票證建立 TLS 會話) 將只會有對等憑證,而沒有完整的鏈。

honorCipherOrder

設定為 true,以強制執行伺服器的密碼順序 (來自 ciphers 設定),而不是允許用戶端選擇密碼。預設值為 false

hostName

SSL 主機的名稱。這應該是完全合格的網域名稱 (例如 tomcat.apache.org) 或萬用字元網域名稱 (例如 *.apache.org)。如果未指定,將使用預設值 _default_。提供的數值總是會轉換成小寫。

insecureRenegotiation

僅限 OpenSSL。

設定是否允許不安全的重新協商。預設值為 false。如果使用的 OpenSSL 版本不支援設定是否允許不安全的重新協商,則會使用該 OpenSSL 版本的預設值。

keyManagerAlgorithm

僅限 JSSE。

要使用的 KeyManager 演算法。預設為 KeyManagerFactory.getDefaultAlgorithm(),這會傳回 Sun JVM 的 SunX509。IBM JVM 會傳回 IbmX509。對於其他廠商,請參閱 JVM 文件以取得預設值。

protocols

與用戶端通訊時要支援的通訊協定名稱。這應該是下列任何組合的清單

  • SSLv2Hello
  • SSLv3
  • TLSv1
  • TLSv1.1
  • TLSv1.2
  • TLSv1.3
  • 全部

清單中的每個令牌都可以加上正號(「+」)或負號(「-」)為前綴。正號會新增通訊協定,負號會從目前的清單中移除通訊協定。清單會從一個空清單開始建立。

令牌全部SSLv2Hello、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3的別名。

請注意,TLSv1.3僅在使用實作TLSv1.3的 JVM 時才支援 JSSE。

請注意,基於 OpenSSL 的安全連線器會忽略SSLv2Hello。如果為基於 OpenSSL 的安全連線器指定多個通訊協定,它將永遠支援SSLv2Hello。如果指定單一通訊協定,它將不支援SSLv2Hello

請注意,SSLv2SSLv3本質上是不安全的。

如果未指定,將使用全部的預設值。

revocationEnabled

僅限 JSSE。

JSSE 提供者是否應啟用憑證撤銷檢查?如果設定了certificateRevocationListFile,則會忽略這個屬性,並永遠啟用撤銷檢查。此屬性用於啟用已透過其他方式為目前的 JSSE 提供者設定的撤銷檢查。如果未指定,將使用預設值false

sessionCacheSize

要保留在快取中的 SSL 會話數。指定-1以使用實作預設值。零以上的值會傳遞給實作。零用於指定不限快取大小,不建議使用。如果未指定,將使用預設值-1

sessionTimeout

SSL 會話在建立後經過多少秒會逾時。指定-1以使用實作預設值。零以上的值會傳遞給實作。零用於指定不限逾時,不建議使用。如果未指定,將使用預設值 86400(24 小時)。

sslProtocol

僅限 JSSE。

要使用的 SSL 通訊協定(單一值可以啟用多個通訊協定 - 詳細資訊請參閱 JVM 文件)。如果未指定,預設值為TLS。允許的值可以從 JVM 文件中取得,以取得建立SSLContext執行個體時演算法的允許值,例如 Oracle Java 11。注意:此屬性和protocols有重疊。

trustManagerClassName

僅限 JSSE。

用於驗證用戶端憑證的自訂信任管理員類別的名稱。此類別必須有一個零參數建構函式,並且還必須實作javax.net.ssl.X509TrustManager。如果設定此屬性,可能會忽略信任儲存體屬性。

truststoreAlgorithm

僅限 JSSE。

要使用的信任儲存庫演算法。如果未指定,則使用 javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm() 返回的預設值。

truststoreFile

僅限 JSSE。

用於驗證用戶端憑證的信任儲存庫檔案。預設值為 javax.net.ssl.trustStore 系統屬性的值。如果未設定此屬性或預設系統屬性,則不會設定信任儲存庫。相對路徑會針對 $CATALINA_BASE 解析。此屬性也可以使用 URL。

truststorePassword

僅限 JSSE。

存取信任儲存庫的密碼。預設值為 javax.net.ssl.trustStorePassword 系統屬性的值。如果該屬性為 null,則不會設定信任儲存庫密碼。如果指定了無效的信任儲存庫密碼,則會記錄警告並嘗試在沒有密碼的情況下存取信任儲存庫,這會略過信任儲存庫內容的驗證。

truststoreProvider

僅限 JSSE。

要使用於伺服器憑證的信任儲存庫提供者的名稱。預設值為 javax.net.ssl.trustStoreProvider 系統屬性的值。如果該屬性為 null,則使用 keystoreProvider 的值作為預設值。如果未設定此屬性、預設系統屬性或 keystoreProvider,則會依偏好順序遍歷已註冊的提供者清單,並使用第一個支援 truststoreType 的提供者。

truststoreType

僅限 JSSE。

用於信任儲存庫的儲存庫類型。預設值為 javax.net.ssl.trustStoreType 系統屬性的值。如果該屬性為 null,則已為此 TLS 虛擬主機設定單一憑證,且該憑證的 keystoreType 不是 PKCS12,則預設值會是單一憑證的 keystoreType。如果這些都沒有識別預設值,則預設值會是 JKS。請參閱下方有關 儲存庫類型 的注意事項。

SSL 支援 - 憑證

屬性 說明
certificateFile

包含伺服器憑證的檔案名稱。格式為 PEM 編碼。相對路徑會針對 $CATALINA_BASE 解析。

除了憑證外,檔案還可以包含作為選用元素的 DH 參數和/或臨時金鑰的 EC 曲線名稱,分別由 openssl dhparamopenssl ecparam 產生。各自 OpenSSL 指令的輸出可以簡單地串接至憑證檔案。

此屬性為必要,除非指定了 certificateKeystoreFile

certificateChainFile

包含與所使用的伺服器憑證相關聯的憑證鏈的檔案名稱。格式為 PEM 編碼。相對路徑將根據 $CATALINA_BASE 解析。

用於 Tomcat 的憑證鏈不應將伺服器憑證包含為其第一個元素。

請注意,當對不同類型使用多個憑證時,它們都必須使用相同的憑證鏈。

certificateKeyAlias

僅限 JSSE。

用於金鑰庫中伺服器金鑰和憑證的別名。如果未指定,將使用從金鑰庫讀取的第一個金鑰。從金鑰庫讀取金鑰的順序取決於實作。金鑰可能不會按照加入金鑰庫的順序從金鑰庫讀取。如果金鑰庫中存在多個金鑰,強烈建議設定 keyAlias 以確保使用正確的金鑰。

certificateKeyFile

包含伺服器私密金鑰的檔案名稱。格式為 PEM 編碼。預設值為 certificateFile 的值,且在此情況下,憑證和私密金鑰都必須在此檔案中(不建議)。相對路徑將根據 $CATALINA_BASE 解析。

certificateKeyPassword

用於從指定檔案存取與伺服器憑證相關聯的私密金鑰的密碼。

如果未指定,JSSE 的預設行為是使用 certificateKeystorePassword。對於 OpenSSL,預設行為是不使用密碼,但 OpenSSL 會在需要時提示輸入密碼。

certificateKeyPasswordFile

用於從指定檔案存取與伺服器憑證相關聯的私密金鑰的密碼檔案。此屬性優先於 certificateKeyPassword

如果未指定,JSSE 的預設行為是使用 certificateKeystorePasswordFile。對於 OpenSSL,預設行為是不使用密碼 (檔案),但 OpenSSL 會在需要時提示輸入密碼。

certificateKeystoreFile

僅限 JSSE。

儲存要載入的伺服器憑證和金鑰的金鑰庫檔案路徑名稱。預設路徑名稱是執行 Tomcat 使用者的作業系統主目錄中的檔案 .keystore。如果您的 keystoreType 不需要檔案,請對此參數使用 "" (空字串) 或 NONE。相對路徑將根據 $CATALINA_BASE 解析。此屬性也可以使用 URI。使用網域金鑰庫 (keystoreTypeDKS) 時,此參數應該是網域金鑰庫的 URI。

除非指定了 certificateFile,否則需要此屬性。

certificateKeystorePassword

僅限 JSSE。

用於存取包含伺服器私人金鑰和憑證的金鑰庫的密碼。如果未指定,將使用預設值 changeit

certificateKeystorePasswordFile

僅限 JSSE。

用於存取包含伺服器私人金鑰和憑證的金鑰庫的密碼檔案。此屬性優先於 certificateKeystorePassword

certificateKeystoreProvider

僅限 JSSE。

用於伺服器憑證的金鑰庫提供者的名稱。如果未指定,將使用系統屬性 javax.net.ssl.keyStoreProvider 的值。如果未設定此屬性或系統屬性,將按優先順序遍歷已註冊的提供者清單,並使用支援 keystoreType 的第一個提供者。

certificateKeystoreType

僅限 JSSE。

用於伺服器憑證的金鑰庫檔案類型。如果未指定,將使用系統屬性 javax.net.ssl.keyStoreType 的值。如果未設定此屬性或系統屬性,將使用預設值 "JKS"。請參閱下方有關 金鑰庫類型 的注意事項。

type

憑證類型。這用於識別與憑證相容的密碼。它必須是 UNDEFINEDRSADSAEC 之一。如果只有一個 Certificate 巢狀在 SSLHostConfig 中,則不需要此屬性,且預設為 UNDEFINED。如果多個 Certificate 巢狀在 SSLHostConfig 中,則需要此屬性,且每個 Certificate 必須有唯一的類型。

SSL 支援 - 連接器 - NIO 和 NIO2

啟用 APR/native 時,連接器將預設透過 JSSE 使用 OpenSSL,這可能比 JSSE Java 實作更最佳化,具體取決於使用的處理器,且可以搭配許多商業加速器元件。

以下 NIO 和 NIO2 SSL 組態屬性不特定於虛擬主機,因此必須在連接器上進行組態。

屬性 說明
sniParseLimit

為了實作 SNI 支援,Tomcat 必須剖析在新的 TLS 連線 (客戶端 hello) 上接收到的第一個 TLS 訊息,以擷取要求的伺服器名稱。訊息需要緩衝,然後才能傳遞給 JSSE 實作進行正常的 TLS 處理。理論上,第一個訊息可能非常大,但實際上通常只有幾百個位元組。此屬性設定 Tomcat 將緩衝的最大訊息大小。如果訊息超過此大小,連線將被組態為彷彿客戶端未指出伺服器名稱。如果未指定,將使用預設值 65536 (64k)。

sslImplementationName

要使用的 SSL 實作類別名稱。如果未指定且未安裝 tomcat-native 函式庫,將使用預設值 org.apache.tomcat.util.net.jsse.JSSEImplementation,它會封裝 JVM 的預設 JSSE 提供者。請注意,JVM 可設定為使用不同的 JSSE 提供者作為預設值。Tomcat 也會將一個特別的 SSL 實作與 JSSE 綑綁在一起,而該實作是由 OpenSSL 支援的。要啟用它,應啟用原生函式庫,而 Tomcat 會自動啟用它,且此屬性的預設值會變成 org.apache.tomcat.util.net.openssl.OpenSSLImplementation。在這種情況下,只要不混合這兩種類型,就可以使用 JSSE 和 OpenSSL 設定樣式的屬性(例如,不允許定義使用 Java 儲存庫金鑰,並使用 OpenSSL 屬性指定一個獨立的 pem 私密金鑰)。

SSL 支援 - OpenSSL 的 SSL_CONF API

當 OpenSSL 提供 TLS 實作時,一個或多個 OpenSSLConfCmd 元素可能會嵌套在 OpenSSLConf 元素內部,以透過 OpenSSL 的 SSL_CONF API 來設定 OpenSSL。一個 OpenSSLConf 元素可能會嵌套在 SSLHostConfig 元素內部。

可用的設定檔命令組會依據所使用的 OpenSSL 版本而定。如需支援的命令名稱和值的清單,請參閱 SSL_CONF_cmd(3) 手冊頁面中支援的設定檔命令部分,以取得 OpenSSL 的資訊。某些設定檔命令可用作 SSLHostConfig 屬性的替代方案。建議僅在無法使用 SSLHostConfig 屬性設定功能時,才使用設定檔命令。

OpenSSLConf 元素不支援任何屬性。

OpenSSLConfCmd 元素支援下列屬性。

屬性 說明
name

設定檔命令的名稱。

value

要使用的設定檔命令值。

金鑰儲存類型

除了標準金鑰儲存庫類型(JKS 和 PKCS12)之外,大多數 Java 執行時間都支援其他金鑰儲存庫類型,例如 Windows-ROOT、Windows-My、DKS 以及硬體安全性模組。通常,若要將這些其他金鑰儲存庫類型與 Tomcat 中的 TLS Connector 一起使用

  • 將 certificateKeystoreType 和/或 truststoreType Connector 屬性(視情況而定)設定為必要的類型
  • 如果需要設定檔,請將 certificateKeystoreFile 和/或 truststoreFile Connector 屬性(視情況而定)設定為指向該檔案
  • 如果不需要設定檔,那麼你幾乎一定需要將 certificateKeystoreFile 和/或 truststoreFile Connector 屬性(視情況而定)明確設定為空字串("")
  • 如果需要密碼,請將 certificateKeystorePassword 和/或 truststorePassword Connector 屬性 (視情況而定) 設為所需的密碼
  • 如果不需要密碼,則幾乎可以確定需要將 certificateKeystorePassword 和/或 truststorePassword Connector 屬性 (視情況而定) 明確設為空字串 ("")

金鑰儲存實作的變化,加上 Tomcat 在背景中執行的金鑰儲存處理,以允許 JSSE 和 OpenSSL 組態樣式之間的互通性,表示有些金鑰儲存可能需要略微不同的組態。隨時可以從 Apache Tomcat 使用者郵件清單 獲得協助。我們的目標是將任何與上述建議不同的金鑰儲存記錄在此處。目前我們沒有發現任何金鑰儲存。

連接器比較

以下是顯示連接器如何不同的簡表。

Java Nio 連接器
NIO
Java Nio2 連接器
NIO2
類別名稱 Http11NioProtocol Http11Nio2Protocol
Tomcat 版本 自 6.0.x 起 自 8.0.x 起
支援輪詢
輪詢大小 maxConnections maxConnections
讀取要求標頭 非封鎖 非封鎖
讀取要求主體 封鎖 封鎖
寫入回應標頭和主體 封鎖 封鎖
等待下一個要求 非封鎖 非封鎖
SSL 支援 Java SSL 或 OpenSSL Java SSL 或 OpenSSL
SSL 交握 非封鎖 非封鎖
最大連線數 maxConnections maxConnections