AJP 連接器
目錄
簡介
AJP 連接器元素表示透過 AJP
通訊協定與網頁連接器通訊的 連接器元件。這用於您希望將 Tomcat 無形整合到現有 (或新的) Apache 安裝中,而且您希望 Apache 處理網頁應用程式中包含的靜態內容,和/或使用 Apache 的 SSL 處理。
使用 AJP 通訊協定需要額外的安全性考量,因為它允許比 HTTP 連接器更直接地操作 Tomcat 的內部資料結構。應特別注意用於 address
、secret
、secretRequired
和 allowedRequestAttributesPattern
屬性的值。
此連接器在與 引擎 的 jvmRoute
屬性結合使用時,支援負載平衡。
此 Tomcat 版本支援的原生連接器為
- JK 1.2.x 與任何受支援的伺服器。請參閱 JK 文件 以取得詳細資料。
- mod_proxy 在 Apache httpd 2.x(預設包含在 Apache HTTP Server 2.2 中),已啟用 AJP:請參閱 httpd 文件 以取得詳細資料。
其他支援 AJP 的原生連接器可能可行,但不再受支援。
屬性
常見屬性
所有 Connector 的實作都支援下列屬性
屬性 | 說明 |
---|---|
allowBackslash |
如果這項設定為 如果未指定,將使用預設值 |
allowTrace |
布林值,可用於啟用或停用 TRACE HTTP 方法。如果未指定,此屬性設定為 false。根據 RFC 7231 第 4.3.8 節,cookie 和授權標頭將從對 TRACE 要求的回應中排除。如果您希望包含這些標頭,您可以為目標 Servlet 實作 |
asyncTimeout |
非同步要求的預設逾時時間(毫秒)。如果未指定,此屬性設定為 Servlet 規範預設值 30000(30 秒)。 |
discardFacades |
布林值,可用於啟用或停用隔離容器內部要求處理物件的門面物件的回收。如果設定為 |
enableLookups |
如果您希望呼叫 |
encodedSolidusHandling |
設定為 |
enforceEncodingInGetWriter |
如果這是 如果未指定,將使用符合預設規格的值 |
maxCookieCount |
允許請求的最大 Cookie 數。小於 0 的值表示沒有限制。如果未指定,將使用預設值 200。 |
maxParameterCount |
從查詢字串取得的請求參數 (包括上傳的檔案) 的最大總數,以及對於 POST 請求,如果內容類型是 |
maxPostSize |
容器 FORM URL 參數剖析將處理的 POST 的最大位元組大小。可透過將此屬性設定為小於 0 的值來停用限制。如果未指定,此屬性會設定為 2097152 (2 MiB)。請注意, |
maxSavePostSize |
容器在 FORM 或 CLIENT-CERT 驗證期間將儲存/緩衝的 POST 的最大位元組大小。對於這兩種驗證類型,POST 將在使用者驗證之前儲存/緩衝。對於 CLIENT-CERT 驗證,POST 會在 SSL 交握期間緩衝,並在處理請求時清空緩衝區。對於 FORM 驗證,POST 會在使用者重新導向至登入表單時儲存,並保留至使用者成功驗證或與驗證請求相關聯的階段逾期為止。可透過將此屬性設定為 -1 來停用限制。將屬性設定為 0 會在驗證期間停用 POST 資料的儲存。如果未指定,此屬性會設定為 4096 (4 KiB)。 |
parseBodyMethods |
使用 |
port |
此 連接器 將會建立伺服器 Socket 並等待傳入連線的 TCP 埠號。作業系統只會允許一個伺服器應用程式在特定 IP 位址上監聽特定埠號。如果使用特殊值 0 (零),Tomcat 會隨機選擇一個可用埠供此連接器使用。這通常只適用於嵌入式和測試應用程式。 |
協定 |
設定處理傳入流量的協定。若要設定 AJP 連接器,則必須指定此設定。如果未提供協定的值,則會設定 HTTP 連接器,而非 AJP 連接器。 |
proxyName |
如果這個 連接器 用於代理設定,請設定這個屬性來指定要傳回給 |
proxyPort |
如果這個 連接器 用於代理設定,請設定這個屬性來指定要傳回給 |
redirectPort |
如果這個 連接器 支援非 SSL 要求,且收到要求,而對應的 |
rejectSuspiciousURIs |
如果 URI 符合 Servlet 6.0 規格識別的可疑 URI 模式之一,這個 連接器 是否應該拒絕要求?預設值為 |
scheme |
將這個屬性設定為您希望 |
secure |
如果您希望 |
URIEncoding |
這會指定在 %xx 解碼 URL 後,用於解碼 URI 位元組的字元編碼。預設值為 |
useBodyEncodingForURI |
這會指定是否應將 contentType 中指定的編碼用於 URI 查詢參數,而不是使用 URIEncoding。此設定是為了與 Tomcat 4.1.x 相容,其中 contentType 中指定的編碼,或使用 Request.setCharacterEncoding 方法明確設定的編碼也用於 URL 中的參數。預設值為 注意事項:請參閱 HTTP 連接器 文件中關於此屬性的注意事項。 |
useIPVHosts |
將此屬性設定為 |
xpoweredBy |
將此屬性設定為 |
標準實作
若要使用 AJP,您必須指定 protocol 屬性(請參閱上方)。
標準 AJP 連接器(NIO 和 NIO2)除了上述常見的連接器屬性外,還支援下列屬性。
屬性 | 說明 |
---|---|
acceptCount |
當 |
acceptorThreadCount |
用於接受連線的執行緒數目。在多 CPU 機器上增加此值,儘管您實際上永遠不需要超過 |
acceptorThreadPriority |
接收執行緒的優先順序。用於接受新連線的執行緒。預設值為 |
address |
對於具有多個 IP 位址的伺服器,此屬性會指定用於在指定埠上監聽的位址。預設情況下,連接器會在迴圈位址上監聽。除非 JVM 使用系統屬性另行設定,否則基於 Java 的連接器 (NIO、NIO2) 會在設定為 |
ajpFlush |
布林值,可用於啟用或停用在發生明確快取時傳送 AJP 快取訊息至前端代理。預設值為 |
allowedRequestAttributesPattern |
AJP 協定使用要求屬性從反向代理傳遞一些資訊至 AJP 連接器。這些屬性為
AJP 協定支援傳遞任意要求屬性。除非整個屬性名稱符合此正規表示式,否則包含任意要求屬性的要求會被拒絕,並傳回 403 回應。如果未指定,預設值為 |
bindOnInit |
控制連接器使用的插槽何時繫結。如果設定為 |
clientCertProvider |
當以非 |
connectionLinger |
此 Connector 使用的 Socket 在關閉時會延遲的秒數。預設值為 |
connectionTimeout |
此 Connector 在接受連線後會等待請求 URI 列顯示的毫秒數。AJP 協定連接器的預設值為 |
executor |
對 Executor 元素中名稱的參照。如果設定此屬性,且已存在指定名稱的執行器,則連接器會使用執行器,且所有其他執行緒屬性都會被忽略。請注意,如果未為連接器指定共用執行器,則連接器會使用私有內部執行器來提供執行緒池。 |
executorTerminationTimeoutMillis |
在繼續停止連接器的程序之前,私有內部執行器會等待請求處理執行緒終止的時間。如果未設定,預設值為 |
keepAliveTimeout |
此 Connector 在關閉連線前會等待下一個 AJP 請求的毫秒數。預設值是使用已為 connectionTimeout 屬性設定的值。 |
maxConnections |
伺服器在任何時間點會接受和處理的最大連線數。當達到此數目時,伺服器會接受,但不會處理,另一個連線。此額外連線會被封鎖,直到正在處理的連線數低於 maxConnections,此時伺服器會開始再次接受和處理新連線。請注意,一旦達到限制,作業系統仍可能根據 僅限於 NIO/NIO2,將值設定為 -1 會停用 maxConnections 功能,且不會計算連線。 |
maxHeaderCount |
容器允許的請求中標頭的最大數目。包含比指定限制更多標頭的請求會被拒絕。小於 0 的值表示沒有限制。如果未指定,會使用預設值 100。 |
maxThreads |
此連接器建立的請求處理執行緒之最大數目,因此決定可同時處理的最大請求數目。若未指定,此屬性設為 200。如果執行器與此連接器關聯,此屬性將被忽略,因為連接器將使用執行器而非內部執行緒池執行工作。請注意,如果執行器已設定,此屬性設定的任何值都將正確記錄,但會報告為 |
minSpareThreads |
始終保持執行中的執行緒之最小數目。這包括主動和閒置執行緒。若未指定,將使用預設值 |
packetSize |
此屬性設定 AJP 封包在位元組中的最大大小。最大值為 65536。它應與為 mod_jk 設定的 |
processorCache |
通訊協定處理常式快取處理器物件以加速效能。此設定決定快取這些物件的數量。 |
secret |
只有來自具有此密碼關鍵字的作業員的請求才會被接受。預設值為 |
secretRequired |
如果此屬性為 |
tcpNoDelay |
如果設為 |
threadPriority |
JVM 內部請求處理執行緒的優先順序。預設值為 |
throwOnFailure |
如果連接器在生命週期轉換期間遇到例外狀況,是否應重新擲回或記錄例外狀況?如果未指定,則會使用預設值 |
tomcatAuthentication |
如果設為 網路伺服器必須將使用者主體 (使用者名稱) 傳送為命名為 請注意,此主體不會關聯任何角色。 預設值為 |
tomcatAuthorization |
如果設為 |
useVirtualThreads |
(布林)使用此屬性來啟用或停用使用內部執行緒的虛擬執行緒。如果此連接器關聯至執行緒,則會忽略此屬性。預設值為 |
Java TCP socket 屬性
除了上面列出的常見連接器和 HTTP 屬性之外,NIO 和 NIO2 實作還支援下列 Java TCP socket 屬性。
屬性 | 說明 |
---|---|
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 的值等於將此設定為 |
socket.soLingerTime |
(int)socket 延遲選項 (SO_LINGER) 的值(以秒為單位)。這等於標準屬性 connectionLinger。此屬性和 |
socket.soTimeout |
這等於標準屬性 connectionTimeout。 |
socket.performanceConnectionTime |
(int)效能設定的第一個值。請參閱 Socket 效能選項 所有三個效能屬性都必須設定,否則將對所有三個屬性使用 JVM 預設值。 |
socket.performanceLatency |
(int)效能設定的第二個值。請參閱 Socket 效能選項 所有三個效能屬性都必須設定,否則將對所有三個屬性使用 JVM 預設值。 |
socket.performanceBandwidth |
(int)效能設定的第三個值。請參閱 Socket 效能選項 所有三個效能屬性都必須設定,否則將對所有三個屬性使用 JVM 預設值。 |
socket.unlockTimeout |
(int)socket 解鎖的逾時時間。當連接器停止時,它會嘗試透過對自己開啟連接器來釋放接受器執行緒。預設值為 |
NIO 專屬組態
下列屬性是 NIO 連接器專屬的。
屬性 | 說明 |
---|---|
socket.directBuffer |
(布林值)布林值,用於判斷是否使用直接 ByteBuffers 或 java 對應的 ByteBuffers。預設為 |
socket.appReadBufSize |
(int)在 Tomcat 中開啟的每個連線都會與一個讀取 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此讀取緩衝區大小為 |
socket.appWriteBufSize |
(int)在 Tomcat 中開啟的每個連線都會與一個寫入 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此寫入緩衝區大小為 |
socket.bufferPool |
(int)NIO 連接器使用一個稱為 NioChannel 的類別,其中包含連結到 socket 的元素。為減少垃圾回收,NIO 連接器會快取這些通道物件。此值指定此快取的大小。預設值為 |
socket.bufferPoolSize |
(int)NioChannel 池也可以基於大小,而不是基於使用的物件。大小計算如下: |
socket.processorCache |
(int)Tomcat 會快取 SocketProcessor 物件以減少垃圾回收。整數值指定快取中最多保留多少個物件。預設值為 |
socket.eventCache |
(int)Tomcat 會快取 PollerEvent 物件以減少垃圾回收。整數值指定快取中最多保留多少物件。預設值為 |
NIO2 專屬組態
下列屬性專屬於 NIO2 連接器。
屬性 | 說明 |
---|---|
useCaches |
(bool)使用此屬性啟用或停用物件快取以減少產生的 GC 物件數量。預設值為 |
socket.directBuffer |
(布林值)布林值,用於判斷是否使用直接 ByteBuffers 或 java 對應的 ByteBuffers。預設為 |
socket.appReadBufSize |
(int)在 Tomcat 中開啟的每個連線都會與一個讀取 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此讀取緩衝區大小為 |
socket.appWriteBufSize |
(int)在 Tomcat 中開啟的每個連線都會與一個寫入 ByteBuffer 關聯。此屬性控制此緩衝區的大小。預設情況下,此寫入緩衝區大小為 |
socket.bufferPoolSize |
(int)NIO2 連接器使用稱為 Nio2Channel 的類別,其中包含連結到 socket 的元素。為了減少垃圾回收,NIO 連接器會快取這些通道物件。此值指定此快取的大小。預設值為 |
socket.processorCache |
(int)Tomcat 會快取 SocketProcessor 物件以減少垃圾回收。整數值指定快取中最多保留多少個物件。預設值為 |
巢狀元件
目前沒有。
特殊功能
代理支援
當 Tomcat 在代理伺服器後方執行時,可以使用 proxyName
和 proxyPort
屬性。這些屬性會修改傳回給呼叫 request.getServerName()
和 request.getServerPort()
方法的 Web 應用程式的值,這些方法通常用於建構重新導向的絕對 URL。如果不設定這些屬性,傳回的值會反映接收代理伺服器連線的伺服器名稱和埠,而不是客戶端將原始要求導向的伺服器名稱和埠。
如需更多資訊,請參閱 代理支援操作指南。
連接器比較
以下是一個小圖表,說明連接器的差異。
Java Nio 連接器 NIO |
Java Nio2 連接器 NIO2 |
|
---|---|---|
類別名稱 | AjpNioProtocol |
AjpNio2Protocol |
Tomcat 版本 | 7.x 以上 | 8.x 以上 |
支援輪詢 | 是 | 是 |
輪詢大小 | maxConnections |
maxConnections |
讀取要求標頭 | 封鎖 | 封鎖 |
讀取要求主體 | 封鎖 | 封鎖 |
寫入回應標頭和主體 | 封鎖 | 封鎖 |
等待下一個要求 | 非封鎖 | 非封鎖 |
最大連線數 | maxConnections |
maxConnections |