AJP コネクタ

目次

はじめに

AJP Connector 要素は、AJP プロトコルを介して Web コネクタと通信する Connector コンポーネントを表します。これは、Tomcat を既存 (または新規) の Apache インストールに透過的に統合したい場合、かつ Apache に Web アプリケーションに含まれる静的コンテンツを処理させたい場合、または Apache の SSL 処理を利用したい場合に使用されます。

AJP プロトコルの使用は、HTTP コネクタよりも Tomcat の内部データ構造をより直接的に操作できるため、追加のセキュリティ上の考慮事項が必要です。特に、addresssecretsecretRequired、および allowedRequestAttributesPattern 属性に使用される値に注意を払う必要があります。

このコネクタは、EnginejvmRoute 属性と組み合わせて使用される場合、ロードバランシングをサポートします。

この Tomcat リリースでサポートされるネイティブコネクタは次のとおりです。

  • サポートされるサーバーのいずれかでの JK 1.2.x。詳細については、JK ドキュメントを参照してください。
  • Apache httpd 2.x の mod_proxy (Apache HTTP Server 2.2 にデフォルトで含まれる) で AJP が有効になっている場合: 詳細については、httpd ドキュメントを参照してください。

AJP をサポートする他のネイティブコネクタも動作する可能性がありますが、現在はサポートされていません。

属性

共通属性

Connector のすべての実装は、以下の属性をサポートします。

属性説明
allowBackslash

これが true の場合、'\' 文字はパス区切り文字として許可されます。

指定されていない場合、デフォルト値の false が使用されます。

allowTrace

TRACE HTTP メソッドを有効または無効にするために使用できるブール値です。指定されていない場合、この属性は false に設定されます。RFC 7231 セクション 4.3.8 に従って、クッキーおよび認証ヘッダーは TRACE リクエストへの応答から除外されます。これらを含めたい場合は、ターゲットの Servlet 用に doTrace() メソッドを実装し、応答を完全に制御できます。

asyncTimeout

非同期リクエストのデフォルトのタイムアウト時間(ミリ秒単位)。指定されていない場合、この属性は Servlet 仕様のデフォルトである 30000 (30 秒) に設定されます。

discardFacades

コンテナの内部リクエスト処理オブジェクトを分離するファサードオブジェクトのリサイクルを有効または無効にするために使用できるブール値です。true に設定すると、各リクエスト後にファサードはガーベージコレクションの対象となり、それ以外の場合は再利用されます。指定されていない場合、この属性は true に設定されます。

enableLookups

request.getRemoteHost() の呼び出しでリモートクライアントの実際のホスト名を返すために DNS ルックアップを実行させたい場合は、true に設定します。DNS ルックアップをスキップして代わりに IP アドレスを文字列形式で返すには (これによりパフォーマンスが向上します)、false に設定します。デフォルトでは、DNS ルックアップは無効になっています。

encodedReverseSolidusHandling

reject に設定すると、%5c シーケンスを含むリクエストパスは 400 応答で拒否されます。decode に設定すると、%5c シーケンスを含むリクエストパスは、他の %nn シーケンスがデコードされるのと同時に \ にデコードされます。passthrough に設定すると、%5c シーケンスを含むリクエストパスは、%5c シーケンスが変更されずに処理されます。

decoded に設定すると、allowBackslash 属性はデコード後に適用されます。

passthrough が使用されている場合、それ以上の %nn デコードを実行するのはアプリケーションの責任です。リクエストパス内の %25 シーケンス (エンコードされた %) も、後でアプリケーションによってパスが %nn デコードされる際に、潜在的な破損やデコード失敗を避けるために、%25 シーケンスが変更されずに処理されます。

指定されていない場合、デフォルト値は decode です。

encodedSolidusHandling

reject に設定すると、%2f シーケンスを含むリクエストパスは 400 応答で拒否されます。decode に設定すると、%2f シーケンスを含むリクエストパスは、他の %nn シーケンスがデコードされるのと同時に / にデコードされます。passthrough に設定すると、%2f シーケンスを含むリクエストパスは、%2f シーケンスが変更されずに処理されます。

passthrough が使用されている場合、それ以上の %nn デコードを実行するのはアプリケーションの責任です。リクエストパス内の %25 シーケンス (エンコードされた %) も、後でアプリケーションによってパスが %nn デコードされる際に、潜在的な破損やデコード失敗を避けるために、%25 シーケンスが変更されずに処理されます。

指定されていない場合、デフォルト値は reject です。

enforceEncodingInGetWriter

これが true の場合、文字エンコーディングが指定されていない状態で Response.getWriter() を呼び出すと、その後の Response.getCharacterEncoding() の呼び出しは ISO-8859-1 を返し、Content-Type 応答ヘッダーには charset=ISO-8859-1 コンポーネントが含まれます。(SRV.15.2.22.1)

指定されていない場合、仕様に準拠したデフォルト値の true が使用されます。

maxCookieCount

リクエストで許可されるクッキーの最大数。ゼロ未満の値は無制限を意味します。指定されていない場合、デフォルト値の 200 が使用されます。

maxParameterCount

クエリ文字列から取得されるリクエストパラメータの最大合計数(アップロードファイルを含む)。POST リクエストの場合、コンテンツタイプが application/x-www-form-urlencoded または multipart/form-data であればリクエストボディからも取得されます。この制限を超えるリクエストは拒否されます。0 未満の値は無制限を意味します。指定されていない場合、デフォルト値の 1000 が使用されます。

maxPartCount

コンテンツタイプが multipart/form-data であるリクエストで許可されるパーツの最大合計数。この制限は maxParameterCount に追加されます。この制限を超えるリクエストは拒否されます。0 未満の値は無制限を意味します。指定されていない場合、デフォルト値の 10 が使用されます。

maxPartHeaderSize

コンテンツタイプが multipart/form-data であるリクエストで、各パーツあたりに許可されるヘッダーバイトの最大数。この制限を超えるリクエストは拒否されます。0 未満の値は無制限を意味します。指定されていない場合、デフォルト値の 512 が使用されます。

maxPostSize

コンテナの FORM URL パラメータ解析によって処理される POST の最大サイズ(バイト単位)。この属性をゼロ未満の値に設定することで、制限を無効にできます。この制限を超えるリクエストは拒否されます。指定されていない場合、この属性は 2097152 (2 MiB) に設定されます。

maxSavePostSize

FORM または CLIENT-CERT 認証中にコンテナによって保存/バッファリングされる POST の最大サイズ(バイト単位)。両方の認証タイプで、ユーザーが認証される前に POST が保存/バッファリングされます。CLIENT-CERT 認証の場合、POST は SSL ハンドシェイク中にバッファリングされ、リクエスト処理時にバッファは空になります。FORM 認証の場合、ユーザーがログインフォームにリダイレクトされている間に POST が保存され、ユーザーが正常に認証されるか、認証リクエストに関連付けられたセッションが期限切れになるまで保持されます。この属性を -1 に設定することで、制限を無効にできます。この属性をゼロに設定すると、認証中の POST データの保存が無効になります。指定されていない場合、この属性は 4096 (4 KiB) に設定されます。

parseBodyMethods

application/x-www-form-urlencoded を使用するリクエストボディが、POST と同様にリクエストパラメータとして解析される HTTP メソッドのコンマ区切りリスト。これは、PUT リクエストに対して POST スタイルのセマンティクスをサポートしたい RESTful アプリケーションで役立ちます。POST 以外の設定は、Tomcat がサーブレット仕様の意図に反する方法で動作することに注意してください。HTTP 仕様に従い、HTTP メソッド TRACE はここでは特に禁止されています。デフォルトは POST です。

port

この Connector がサーバーソケットを作成し、受信接続を待機する TCP ポート番号。オペレーティングシステムは、特定の IP アドレス上の特定のポート番号で、1つのサーバーアプリケーションのみがリッスンすることを許可します。特殊な値である 0 (ゼロ) が使用される場合、Tomcat はこのコネクタで使用する空いているポートをランダムに選択します。これは通常、組み込みアプリケーションやテストアプリケーションでのみ役立ちます。

protocol

受信トラフィックを処理するプロトコルを設定します。AJP コネクタを設定するには、これを指定する必要があります。プロトコルの値が指定されていない場合、AJP コネクタではなく HTTP コネクタが設定されます。
AJP コネクタの標準プロトコル値は AJP/1.3 であり、Java NIO ベースのコネクタを使用します。
明示的なプロトコルを使用するには、以下の値を使用できます。
org.apache.coyote.ajp.AjpNioProtocol - ノンブロッキング Java NIO コネクタ。
org.apache.coyote.ajp.AjpNio2Protocol - ノンブロッキング Java NIO2 コネクタ。
カスタム実装も使用できます。
コネクタの比較表をご覧ください。

proxyName

この Connector がプロキシ構成で使用されている場合、request.getServerName() の呼び出しに対して返されるサーバー名を指定するためにこの属性を設定します。詳細については、プロキシサポートを参照してください。

proxyPort

この Connector がプロキシ構成で使用されている場合、request.getServerPort() の呼び出しに対して返されるサーバーポートを指定するためにこの属性を設定します。詳細については、プロキシサポートを参照してください。

redirectPort

この Connector が非 SSL リクエストをサポートしており、一致する <security-constraint> が SSL トランスポートを要求するリクエストを受信した場合、Catalina は自動的にリクエストをここで指定されたポート番号にリダイレクトします。

rejectSuspiciousURIs

この Connector は、URI が Servlet 6.0 仕様で識別された疑わしい URI パターンに一致する場合、リクエストを拒否すべきですか?デフォルト値は false です。

scheme

request.getScheme() の呼び出しによって返されることを希望するプロトコル名にこの属性を設定します。たとえば、SSL Connector の場合、この属性を "https" に設定します。デフォルト値は "http" です。

secure

このコネクタで受信したリクエストに対して request.isSecure() の呼び出しが true を返すようにしたい場合、この属性を true に設定します。これは、SSL コネクタ、または暗号化カード、SSL アプライアンス、あるいは Web サーバーなどの SSL アクセラレータからデータを受信する非 SSL コネクタで使用したいでしょう。デフォルト値は false です。

URIEncoding

これは、URL の %xx デコード後に URI バイトをデコードするために使用される文字エンコーディングを指定します。デフォルト値は UTF-8 です。

useBodyEncodingForURI

URIEncoding の代わりに、contentType で指定されたエンコーディングを URI クエリパラメータに使用するかどうかを指定します。この設定は、Tomcat 4.1.x との互換性のために存在します。Tomcat 4.1.x では、contentType で指定されたエンコーディング、または Request.setCharacterEncoding メソッドを使用して明示的に設定されたエンコーディングも、URL からのパラメータに使用されていました。デフォルト値は false です。

注: この属性に関する注意点は、HTTP コネクタのドキュメントを参照してください。

useIPVHosts

Tomcat がネイティブ Web サーバーから渡された IP アドレスを使用して、リクエストを送信するホストを決定するようにするには、この属性を true に設定します。デフォルト値は false です。

xpoweredBy

Tomcat が、仕様で推奨されるヘッダーを使用して Servlet 仕様のサポートを宣伝するようにするには、この属性を true に設定します。デフォルト値は false です。

標準実装

AJP を使用するには、protocol 属性 (上記参照) を指定する必要があります。

標準の AJP コネクタ (NIO および NIO2) は、上記の共通コネクタ属性に加えて、以下の属性をサポートします。

属性説明
acceptCount

maxConnections に達した際に、オペレーティングシステムが提供する受信接続リクエストのキューの最大長。オペレーティングシステムはこの設定を無視し、キューに異なるサイズを使用する場合があります。このキューがいっぱいになると、オペレーティングシステムは積極的に追加の接続を拒否するか、それらの接続がタイムアウトする可能性があります。デフォルト値は 100 です。

acceptorThreadPriority

アクセプタースレッドの優先度。新しい接続を受け入れるために使用されるスレッド。デフォルト値は 5 (java.lang.Thread.NORM_PRIORITY 定数の値) です。この優先度が何を意味するかについての詳細は、java.lang.Thread クラスの JavaDoc を参照してください。

address

複数の IP アドレスを持つサーバーの場合、この属性は指定されたポートでリッスンするために使用されるアドレスを指定します。デフォルトでは、コネクタはループバックアドレスでリッスンします。JVM がシステムプロパティを使用して他に構成されていない限り、Java ベースのコネクタ (NIO、NIO2) は、0.0.0.0 または :: のいずれかで構成されている場合、IPv4 および IPv6 アドレスの両方でリッスンします。

ajpFlush

明示的なフラッシュが発生するたびに、前面のプロキシに AJP フラッシュメッセージを送信することを有効または無効にするために使用できるブール値です。デフォルト値は true です。
AJP フラッシュメッセージは、ボディコンテンツのない SEND_BODY_CHUNK パケットです。mod_jk や mod_proxy_ajp のようなプロキシ実装は、このようなパケットを受信すると、Web サーバーでバッファリングされたデータをクライアントにフラッシュします。これを false に設定すると AJP パケットトラフィックを削減できますが、クライアントへのパケット送信が遅れる可能性があります。応答の最後に、AJP は常にクライアントにフラッシュします。

allowedRequestAttributesPattern

AJP プロトコルは、リクエスト属性を使用してリバースプロキシから AJP コネクタに情報を渡します。これらの属性は次のとおりです。

  • javax.servlet.request.cipher_suite
  • javax.servlet.request.key_size
  • javax.servlet.request.ssl_session
  • javax.servlet.request.X509Certificate
  • AJP_LOCAL_ADDR
  • AJP_REMOTE_PORT
  • AJP_SSL_PROTOCOL
  • JK_LB_ACTIVATION
  • CERT_ISSUER (IIS のみ)
  • CERT_SUBJECT (IIS のみ)
  • CERT_COOKIE (IIS のみ)
  • HTTPS_SERVER_SUBJECT (IIS のみ)
  • CERT_FLAGS (IIS のみ)
  • HTTPS_SECRETKEYSIZE (IIS のみ)
  • CERT_SERIALNUMBER (IIS のみ)
  • HTTPS_SERVER_ISSUER (IIS のみ)
  • HTTPS_KEYSIZE (IIS のみ)

AJP プロトコルは、任意の任意のリクエスト属性の受け渡しをサポートします。任意の任意のリクエスト属性を含むリクエストは、属性名全体がこの正規表現に一致しない限り、403 応答で拒否されます。指定されていない場合、デフォルト値は null です。

bindOnInit

コネクタが使用するソケットがバインドされるタイミングを制御します。true に設定されている場合、コネクタが初期化されたときにバインドされ、コネクタが破棄されたときにアンバインドされます。false に設定されている場合、ソケットはコネクタが開始されたときにバインドされ、停止されたときにアンバインドされます。指定されていない場合、デフォルトは true です。

clientCertProvider

クライアント証明書情報が java.security.cert.X509Certificate のインスタンス以外の形式で提示された場合、使用前に変換する必要があり、このプロパティは変換を実行するためにどの JSSE プロバイダが使用されるかを制御します。指定されていない場合、デフォルトのプロバイダが使用されます。

connectionLinger

この Connector が使用するソケットが閉じられたときに、ソケットがlinger状態になる秒数。デフォルト値は -1 で、ソケットのlingerを無効にします。

connectionTimeout

この Connector が接続を受け入れた後、リクエスト URI 行が提示されるまで待機するミリ秒数。AJP プロトコルコネクタのデフォルト値は -1 (つまり無限) です。

executor

Executor 要素内の名前への参照。この属性が設定され、指定された名前のエグゼキュータが存在する場合、コネクタはそのエグゼキュータを使用し、他のすべてのスレッド属性は無視されます。コネクタに共有エグゼキュータが指定されていない場合、コネクタはプライベートな内部エグゼキュータを使用してスレッドプールを提供することに注意してください。

executorTerminationTimeoutMillis

プライベート内部エグゼキュータが、コネクタの停止プロセスを続行する前に、リクエスト処理スレッドが終了するのを待機する時間。設定されていない場合、デフォルトは 5000 (5 秒) です。

keepAliveTimeout

この Connector が接続を閉じる前に、次の AJP リクエストを待機するミリ秒数。デフォルト値は、connectionTimeout 属性に設定されている値を使用します。

maxConnections

サーバーが一度に受け入れ、処理する接続の最大数。この数に達すると、サーバーはさらに 1 つの接続を受け入れますが、処理はしません。この追加の接続は、処理中の接続数が maxConnections を下回るまでブロックされ、その時点でサーバーは新しい接続の受け入れと処理を再開します。制限に達した後でも、オペレーティングシステムは acceptCount 設定に基づいて接続を受け入れる可能性があることに注意してください。デフォルト値は 8192 です。

NIO/NIO2 のみに適用され、値を -1 に設定すると、maxConnections 機能が無効になり、接続数はカウントされません。

maxHeaderCount

コンテナによって許可されるリクエスト内のヘッダーの最大数。指定された制限よりも多くのヘッダーを含むリクエストは拒否されます。0 未満の値は無制限を意味します。指定されていない場合、デフォルト値の 100 が使用されます。

maxThreads

この Connector によって作成されるリクエスト処理スレッドの最大数であり、それゆえに処理できる同時リクエストの最大数を決定します。指定されていない場合、この属性は 200 に設定されます。このコネクタにエグゼキュータが関連付けられている場合、コネクタは内部スレッドプールではなくエグゼキュータを使用してタスクを実行するため、この属性は無視されます。エグゼキュータが構成されている場合、この属性に設定された値は正しく記録されますが、使用されていないことを明確にするために -1 として報告される (JMX などで) ことに注意してください。

minSpareThreads

常に実行状態に保たれるスレッドの最小数。これにはアクティブなスレッドとアイドル状態のスレッドの両方が含まれます。指定されていない場合、デフォルトの 10 が使用されます。このコネクタにエグゼキュータが関連付けられている場合、コネクタは内部スレッドプールではなくエグゼキュータを使用してタスクを実行するため、この属性は無視されます。エグゼキュータが構成されている場合、この属性に設定された値は正しく記録されますが、使用されていないことを明確にするために -1 として報告される (JMX などで) ことに注意してください。

packetSize

この属性は、最大 AJP パケットサイズをバイト単位で設定します。最大値は 65536 です。mod_jk 用に設定された max_packet_size ディレクティブと同じである必要があります。通常、最大パケットサイズを変更する必要はありません。証明書または証明書チェーンを送信する際に、デフォルト値に関する問題が報告されています。デフォルト値は 8192 です。8192 未満に設定した場合、その設定は無視され、デフォルト値の 8192 が使用されます。

processorCache

プロトコルハンドラは、パフォーマンスを高速化するために Processor オブジェクトをキャッシュします。この設定は、これらのオブジェクトのうちいくつがキャッシュされるかを規定します。-1 は無制限を意味し、デフォルトは 200 です。Servlet 3.0 非同期処理を使用しない場合、maxThreads 設定と同じ値を使用するのが良いデフォルトです。Servlet 3.0 非同期処理を使用する場合、maxThreads と予想される同時リクエストの最大数 (同期および非同期) のうち大きい方を使用するのが良いデフォルトです。

secret

このシークレットキーワードを持つワーカーからのリクエストのみが受け入れられます。デフォルト値は null です。この属性は、secretRequired が明示的に false に設定されていない限り、null ではない、かつ長さがゼロではない値で指定する必要があります。この属性が null ではない、かつ長さがゼロではない値で構成されている場合、ワーカーは一致する値を提供しなければならず、そうでなければ secretRequired の設定に関わらずリクエストは拒否されます。

secretRequired

この属性が true の場合、AJP コネクタは secret 属性が null ではない、かつ長さがゼロではない値で構成されている場合にのみ起動します。この属性は、AJP コネクタが起動するために secret 属性の指定が必須かどうかのみを制御します。ワーカーがシークレットを提供する必要があるかどうかは制御しません。デフォルト値は true です。この属性は、コネクタが信頼されたネットワーク上で使用される場合にのみ false に設定すべきです。

tcpNoDelay

true に設定すると、サーバーソケットに TCP_NO_DELAY オプションが設定され、ほとんどの状況でパフォーマンスが向上します。これはデフォルトで true に設定されています。

threadPriority

JVM 内のリクエスト処理スレッドの優先度。デフォルト値は 5 (java.lang.Thread.NORM_PRIORITY 定数の値) です。この優先度が何を意味するかについての詳細は、java.lang.Thread クラスの JavaDoc を参照してください。このコネクタにエグゼキュータが関連付けられている場合、コネクタは内部スレッドプールではなくエグゼキュータを使用してタスクを実行するため、この属性は無視されます。エグゼキュータが構成されている場合、この属性に設定された値は正しく記録されますが、使用されていないことを明確にするために -1 として報告される (JMX などで) ことに注意してください。

throwOnFailure

コネクタがライフサイクル遷移中に例外を発生させた場合、その例外を再スローするか、ログに記録すべきですか?指定されていない場合、デフォルトの false が使用されます。デフォルトは org.apache.catalina.startup.EXIT_ON_INIT_FAILURE システムプロパティによって変更できることに注意してください。

tomcatAuthentication

true に設定すると、認証は Tomcat で行われます。それ以外の場合、認証されたプリンシパルはネイティブ Web サーバーから伝播され、Tomcat での承認に使用されます。

Web サーバーは、ユーザープリンシパル (ユーザー名) を REMOTE_USER という名前のリクエスト属性として送信する必要があります。

このプリンシパルにはロールが関連付けられていないことに注意してください。

デフォルト値は true です。tomcatAuthorizationtrue に設定されている場合、この属性は効果がありません。

tomcatAuthorization

true に設定すると、認証されたプリンシパルはネイティブ Web サーバーから伝播され、Tomcat で既に認証されていると見なされます。Web アプリケーションに 1 つ以上のセキュリティ制約がある場合、その後、Tomcat によって認可が実行され、認証されたプリンシパルにロールが割り当てられます。リクエストに対する適切な Tomcat Realm が提供されたユーザー名を認識しない場合でも、Principal は作成されますが、ロールは持たれません。デフォルト値は false です。

useVirtualThreads

(bool) 内部エグゼキュータで仮想スレッドの使用を有効または無効にするには、この属性を使用します。このコネクタにエグゼキュータが関連付けられている場合、この属性は無視されます。デフォルト値は false です。

Java TCP ソケット属性

NIO および NIO2 の実装は、上記の共通コネクタ属性および HTTP 属性に加えて、以下の Java TCP ソケット属性をサポートします。

属性説明
socket.rxBufSize

(int) ソケット受信バッファ (SO_RCVBUF) のサイズ(バイト単位)。設定されていない場合、JVM のデフォルトが使用されます。

socket.txBufSize

(int) ソケット送信バッファ (SO_SNDBUF) のサイズ(バイト単位)。設定されていない場合、JVM のデフォルトが使用されます。この値を明示的に設定する場合は注意が必要です。一部の JVM では、約 8k 未満の値で非常に低いパフォーマンスが観察されています。

socket.tcpNoDelay

(bool) これは標準属性 tcpNoDelay と同等です。

socket.soKeepAlive

(bool) ソケットのキープアライブ設定 (SO_KEEPALIVE) のブール値。設定されていない場合、JVM のデフォルトが使用されます。

socket.ooBInline

(bool) ソケットの OOBINLINE 設定のブール値。設定されていない場合、JVM のデフォルトが使用されます。

socket.soReuseAddress

(bool) ソケットの再利用アドレスオプション (SO_REUSEADDR) のブール値。設定されていない場合、JVM のデフォルトが使用されます。

socket.soLingerOn

(bool) ソケットの so linger オプション (SO_LINGER) のブール値。標準属性 connectionLinger の値が >=0 である場合、これを true に設定することと同等です。標準属性 connectionLinger の値が <0 である場合、これを false に設定することと同等です。この属性と soLingerTime の両方を設定する必要があります。そうしないと、両方に JVM のデフォルトが使用されます。

socket.soLingerTime

(int) ソケットの so linger オプション (SO_LINGER) の値(秒単位)。これは標準属性 connectionLinger と同等です。この属性と soLingerOn の両方を設定する必要があります。そうしないと、両方に JVM のデフォルトが使用されます。

socket.soTimeout

これは標準属性 connectionTimeout と同等です。

socket.performanceConnectionTime

(int) パフォーマンス設定の最初の値。Socket Performance Options を参照してください。これら 3 つのパフォーマンス属性はすべて設定する必要があります。そうしないと、3 つすべてに JVM のデフォルトが使用されます。

socket.performanceLatency

(int) パフォーマンス設定の 2 番目の値。Socket Performance Options を参照してください。これら 3 つのパフォーマンス属性はすべて設定する必要があります。そうしないと、3 つすべてに JVM のデフォルトが使用されます。

socket.performanceBandwidth

(int) パフォーマンス設定の 3 番目の値。Socket Performance Options を参照してください。これら 3 つのパフォーマンス属性はすべて設定する必要があります。そうしないと、3 つすべてに JVM のデフォルトが使用されます。

socket.unlockTimeout

(int) ソケットアンロックのタイムアウト。コネクタが停止されると、自身へのコネクタを開くことでアクセプタースレッドを解放しようとします。デフォルト値は 250 で、値はミリ秒単位です。

NIO 固有の設定

以下の属性は NIO コネクタに固有のものです。

属性説明
socket.directBuffer

(bool) 直接 ByteBuffer を使用するか、Java マップされた ByteBuffer を使用するかを示すブール値。デフォルトは false です。
直接バッファを使用している場合は、ダイレクトメモリー空間に適切な量のメモリーを割り当てるようにしてください。Sun の JDK の場合、-XX:MaxDirectMemorySize=256m のようになります。

socket.appReadBufSize

(int) Tomcat で開かれる各接続には、読み取り ByteBuffer が関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファは 8192 バイトのサイズです。同時実行数が低い場合は、より多くのデータをバッファリングするためにこれを増やすことができます。非常に多くのキープアライブ接続がある場合は、この数を減らすか、ヒープサイズを増やしてください。

socket.appWriteBufSize

(int) Tomcat で開かれる各接続には、書き込み ByteBuffer が関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファは 8192 バイトのサイズです。同時実行数が低い場合は、より多くの応答データをバッファリングするためにこれを増やすことができます。非常に多くのキープアライブ接続がある場合は、この数を減らすか、ヒープサイズを増やしてください。
ここのデフォルト値はかなり低いので、数万の同時接続を扱っていない場合は、これを増やすべきです。

socket.bufferPool

(int) NIO コネクタは、ソケットにリンクされた要素を保持する NioChannel と呼ばれるクラスを使用します。ガーベージコレクションを減らすために、NIO コネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は 500 であり、キャッシュが 500 個の NioChannel オブジェクトを保持することを表します。その他の値は、無制限キャッシュの場合は -1、キャッシュなしの場合は 0 です。

socket.bufferPoolSize

(int) NioChannel プールは、使用されたオブジェクトベースではなく、サイズベースにすることもできます。サイズは次のように計算されます。
NioChannel バッファサイズ = 読み取りバッファサイズ + 書き込みバッファサイズ
SecureNioChannel バッファサイズ = アプリケーション読み取りバッファサイズ + アプリケーション書き込みバッファサイズ + ネットワーク読み取りバッファサイズ + ネットワーク書き込みバッファサイズ
値はバイト単位で、デフォルト値は 1024*1024*100 (100 MiB) です。

socket.processorCache

(int) Tomcat は、ガーベージコレクションを減らすために SocketProcessor オブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは 0 です。その他の値は、無制限キャッシュの場合は -1、キャッシュなしの場合は 0 です。

socket.eventCache

(int) Tomcat は、ガーベージコレクションを減らすために PollerEvent オブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは 0 です。その他の値は、無制限キャッシュの場合は -1、キャッシュなしの場合は 0 です。

NIO2 固有の設定

以下の属性は NIO2 コネクタに固有のものです。

属性説明
useCaches

(bool) GC オブジェクトの生成量を減らすために、オブジェクトキャッシングを有効または無効にするには、この属性を使用します。デフォルト値は false です。

socket.directBuffer

(bool) 直接 ByteBuffer を使用するか、Java マップされた ByteBuffer を使用するかを示すブール値。デフォルトは false です。
直接バッファを使用している場合は、ダイレクトメモリー空間に適切な量のメモリーを割り当てるようにしてください。Sun の JDK の場合、-XX:MaxDirectMemorySize=256m のようになります。

socket.appReadBufSize

(int) Tomcat で開かれる各接続には、読み取り ByteBuffer が関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファは 8192 バイトのサイズです。同時実行数が低い場合は、より多くのデータをバッファリングするためにこれを増やすことができます。非常に多くのキープアライブ接続がある場合は、この数を減らすか、ヒープサイズを増やしてください。

socket.appWriteBufSize

(int) Tomcat で開かれる各接続には、書き込み ByteBuffer が関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファは 8192 バイトのサイズです。同時実行数が低い場合は、より多くの応答データをバッファリングするためにこれを増やすことができます。非常に多くのキープアライブ接続がある場合は、この数を減らすか、ヒープサイズを増やしてください。
ここのデフォルト値はかなり低いので、数万の同時接続を扱っていない場合は、これを増やすべきです。

socket.bufferPoolSize

(int) NIO2 コネクタは、ソケットにリンクされた要素を保持する Nio2Channel と呼ばれるクラスを使用します。ガーベージコレクションを減らすために、NIO2 コネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は 500 であり、キャッシュが 500 個の Nio2Channel オブジェクトを保持することを表します。その他の値は、無制限キャッシュの場合は -1、キャッシュなしの場合は 0 です。

socket.processorCache

(int) Tomcat は、ガーベージコレクションを減らすために SocketProcessor オブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは 0 です。その他の値は、無制限キャッシュの場合は -1、キャッシュなしの場合は 0 です。

ネストされたコンポーネント

現在、ありません。

特殊機能

プロキシサポート

proxyName および proxyPort 属性は、Tomcat がプロキシサーバーの背後で実行されている場合に使用できます。これらの属性は、request.getServerName() および request.getServerPort() メソッドを呼び出す Web アプリケーションに返される値を変更します。これらのメソッドは、リダイレクト用の絶対 URL を構築するためによく使用されます。これらの属性を設定しない場合、返される値は、クライアントが元々リクエストを送信したサーバー名とポートではなく、プロキシサーバーからの接続が受信されたサーバー名とポートを反映します。

詳細については、プロキシサポートのハウツーを参照してください。

コネクタの比較

以下は、コネクタがどのように異なるかを示す小さな表です。

Java NIO コネクタ
NIO
Java NIO2 コネクタ
NIO2
クラス名 AjpNioProtocol AjpNio2Protocol
Tomcat バージョン 7.x 以降 8.x 以降
ポーリングのサポート はい はい
ポーリングサイズ maxConnections maxConnections
リクエストヘッダーの読み取り ブロッキング ブロッキング
リクエストボディの読み取り ブロッキング ブロッキング
応答ヘッダーとボディの書き込み ブロッキング ブロッキング
次のリクエストを待機 ノンブロッキング ノンブロッキング
最大接続数 maxConnections maxConnections