AJPコネクタ

目次

はじめに

AJPコネクタ要素は、AJPプロトコルを介してウェブコネクタと通信するコネクタコンポーネントを表します。これは、Tomcatを既存の(または新しい)Apacheインストールに目に見えない形で統合し、Apacheにウェブアプリケーションに含まれる静的コンテンツの処理、および/またはApacheのSSL処理を利用させたい場合に使用されます。

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

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

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

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

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

属性

共通属性

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

属性説明
allowBackslash

これがtrueの場合、「\」文字がパスデリミタとして許可されます。

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

allowTrace

TRACE HTTPメソッドを有効または無効にするために使用できるブール値です。指定されていない場合、この属性はfalseに設定されます。RFC 7231セクション4.3.8に従って、Cookieヘッダーと承認ヘッダーはTRACE要求へのレスポンスから除外されます。これらをインクルードする場合は、ターゲットサーブレットのdoTrace()メソッドを実装して、レスポンスを完全に制御できます。

asyncTimeout

非同期要求のデフォルトタイムアウト(ミリ秒単位)。指定されていない場合、この属性はサーブレット仕様のデフォルト値である30000(30秒)に設定されます。

discardFacades

コンテナの内部要求処理オブジェクトを分離するファサードオブジェクトのリサイクルを有効または無効にするために使用できるブール値です。trueに設定すると、ファサードは要求ごとにガベージコレクションのために設定され、それ以外の場合は再利用されます。セキュリティマネージャーが有効になっている場合、この設定は効果がありません。指定されていない場合、この属性はtrueに設定されます。

enableLookups

request.getRemoteHost()への呼び出しでDNSルックアップを実行して、リモートクライアントの実際のホスト名を返す場合にtrueに設定します。DNSルックアップをスキップして代わりにIPアドレスを文字列形式で返す(パフォーマンスを向上させる)にはfalseに設定します。デフォルトでは、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-urlencodedまたはmultipart/form-dataの場合の要求本文です。この制限を超える要求パラメータは無視されます。0未満の値は制限なしを意味します。指定されていない場合、デフォルトは10000です。FailedRequestFilter フィルタを使用して、制限を超える要求を拒否できます。

maxPostSize

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

maxSavePostSize

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

parseBodyMethods

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

port

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

protocol

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

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アプライアンス、さらにはWebサーバーなどのSSLアクセラレータからデータを受信している非SSLコネクタで使用することをお勧めします。デフォルト値はfalseです。

URIEncoding

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

useBodyEncodingForURI

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

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

useIPVHosts

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

xpoweredBy

Tomcatが仕様で推奨されているヘッダーを使用してサーブレット仕様のサポートをアドバタイズするようにするには、この属性をtrueに設定します。デフォルト値はfalseです。

標準実装

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

標準のAJPコネクタ(NIOとNIO2)は、上記でリストされている共通のコネクタ属性に加えて、次の属性もサポートしています。

属性説明
acceptCount

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

acceptorThreadCount

接続の受け入れに使用されるスレッド数です。マルチCPUマシンではこの値を増やしますが、2を超える必要があることはほとんどありません。また、キープアライブでない接続が多い場合、この値を増やすことも検討する必要があります。デフォルト値は1です。

acceptorThreadPriority

アクセプタースレッドの優先順位です。新しい接続を受け入れるために使用されるスレッドです。デフォルト値は5java.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

この**コネクタ**で使用されるソケットが閉じられる際に保持される秒数です。デフォルト値は-1で、ソケットの保持を無効にします。

connectionTimeout

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

executor

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

executorTerminationTimeoutMillis

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

keepAliveTimeout

この**コネクタ**が接続を閉じる前に、別のAJPリクエストを待機するミリ秒数です。デフォルト値は、connectionTimeout属性に設定された値を使用することです。

maxConnections

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

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

maxHeaderCount

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

maxThreads

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

minSpareThreads

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

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

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レルムが提供されたユーザー名を認識しない場合、プリンシパルは作成されますが、ロールは割り当てられません。デフォルト値はfalseです。

useVirtualThreads

(bool) この属性を使用して、内部executorでの仮想スレッドの使用を有効または無効にします。executorがこのコネクタに関連付けられている場合、この属性は無視されます。デフォルト値は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)のブール値です。標準属性connectionLingerの値が≧0の場合、これはtrueに設定することと同等です。標準属性connectionLingerの値が<0の場合、これはfalseに設定することと同等です。この属性とsoLingerTimeの両方を設定する必要があります。そうでない場合、JVMのデフォルト値が両方で使用されます。

socket.soLingerTime

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

socket.soTimeout

標準属性のconnectionTimeoutに相当します。

socket.performanceConnectionTime

(int) パフォーマンス設定の最初の値。 Socket パフォーマンスオプションを参照してください。3つのパフォーマンス属性全てを設定する必要があります。設定しない場合、JVMのデフォルト値が使用されます。

socket.performanceLatency

(int) パフォーマンス設定の2番目の値。 Socket パフォーマンスオプションを参照してください。3つのパフォーマンス属性全てを設定する必要があります。設定しない場合、JVMのデフォルト値が使用されます。

socket.performanceBandwidth

(int) パフォーマンス設定の3番目の値。 Socket パフォーマンスオプションを参照してください。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と呼ばれるクラスを使用します。ガベージコレクションを削減するために、NIOコネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は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