AJPコネクタ
目次
はじめに
AJPコネクタ要素は、AJP
プロトコルを介してウェブコネクタと通信するコネクタコンポーネントを表します。これは、Tomcatを既存の(または新しい)Apacheインストールに目に見えない形で統合し、Apacheにウェブアプリケーションに含まれる静的コンテンツの処理、および/またはApacheのSSL処理を利用させたい場合に使用されます。
AJPプロトコルの使用には、HTTPコネクタよりもTomcatの内部データ構造を直接操作できるため、追加のセキュリティ上の考慮事項が必要です。address
、secret
、secretRequired
、allowedRequestAttributesPattern
属性に使用される値には、特に注意を払う必要があります。
このコネクタは、EngineのjvmRoute
属性と組み合わせて使用する場合、ロードバランシングをサポートします。
このTomcatリリースでサポートされているネイティブコネクタは次のとおりです。
- サポートされているサーバーのいずれかを使用したJK 1.2.x。詳細については、JKドキュメントを参照してください。
- AJPを有効にしたApache httpd 2.x(Apache HTTP Server 2.2にデフォルトで含まれています)のmod_proxy。詳細については、httpdドキュメントを参照してください。
AJPをサポートするその他のネイティブコネクタは機能する可能性がありますが、もはやサポートされていません。
属性
共通属性
Connectorのすべての実装は、次の属性をサポートしています。
属性 | 説明 |
---|---|
allowBackslash |
これが 指定されていない場合、デフォルト値の |
allowTrace |
TRACE HTTPメソッドを有効または無効にするために使用できるブール値です。指定されていない場合、この属性はfalseに設定されます。RFC 7231セクション4.3.8に従って、Cookieヘッダーと承認ヘッダーはTRACE要求へのレスポンスから除外されます。これらをインクルードする場合は、ターゲットサーブレットの |
asyncTimeout |
非同期要求のデフォルトタイムアウト(ミリ秒単位)。指定されていない場合、この属性はサーブレット仕様のデフォルト値である30000(30秒)に設定されます。 |
discardFacades |
コンテナの内部要求処理オブジェクトを分離するファサードオブジェクトのリサイクルを有効または無効にするために使用できるブール値です。 |
enableLookups |
|
encodedSolidusHandling |
|
enforceEncodingInGetWriter |
これが 指定されていない場合、デフォルトの仕様準拠値である |
maxCookieCount |
要求に対して許可されるCookieの最大数です。0未満の値は、制限なしを意味します。指定されていない場合、デフォルト値は200になります。 |
maxParameterCount |
クエリ文字列から取得される要求パラメータ(アップロードされたファイルを含む)の最大合計数と、POST要求の場合、コンテンツタイプが |
maxPostSize |
コンテナのFORM URLパラメータ解析によって処理されるPOSTの最大サイズ(バイト単位)。この属性を0未満の値に設定することで、制限を無効にできます。指定されていない場合、この属性は2097152(2 MiB)に設定されます。 |
maxSavePostSize |
FORM認証またはクライアント証明書認証中にコンテナによって保存/バッファリングされるPOSTの最大サイズ(バイト単位)。両方のタイプの認証について、ユーザーが認証される前にPOSTが保存/バッファリングされます。クライアント証明書認証の場合、POSTはSSLハンドシェイクの期間バッファリングされ、要求が処理されるときにバッファは空になります。FORM認証の場合、ユーザーがログインフォームにリダイレクトされている間POSTが保存され、ユーザーが正常に認証されるまで、または認証要求に関連付けられたセッションが期限切れになるまで保持されます。この属性を-1に設定することで、制限を無効にできます。属性を0に設定すると、認証中のPOSTデータの保存が無効になります。指定されていない場合、この属性は4096(4 KiB)に設定されます。 |
parseBodyMethods |
|
port |
このコネクタがサーバーソケットを作成して着信接続を待つTCPポート番号です。オペレーティングシステムでは、特定のIPアドレス上の特定のポート番号をリッスンできるサーバーアプリケーションは1つだけです。特別な値0(ゼロ)を使用する場合、Tomcatはこのコネクタに使用するためにランダムに空きポートを選択します。これは通常、埋め込みアプリケーションやテストアプリケーションでのみ役立ちます。 |
protocol |
着信トラフィックを処理するプロトコルを設定します。AJPコネクタを設定するには、これを指定する必要があります。protocolの値が提供されていない場合、AJPコネクタではなくHTTPコネクタが設定されます。 |
proxyName |
このコネクタがプロキシ構成で使用されている場合、 |
proxyPort |
このコネクタがプロキシ構成で使用されている場合、 |
redirectPort |
このコネクタが非SSL要求をサポートしており、一致する |
rejectSuspiciousURIs |
このコネクタが、URIがServlet 6.0仕様で識別された疑わしいURIパターンのいずれかに一致する場合に要求を拒否する必要がありますか?デフォルト値は |
scheme |
|
secure |
このコネクタによって受信された要求について、 |
URIEncoding |
これは、URLを%xxデコードした後、URIバイトをデコードするために使用される文字エンコーディングを指定します。デフォルト値は |
useBodyEncodingForURI |
これは、URIクエリパラメータにURIEncodingを使用する代わりに、contentTypeで指定されたエンコーディングを使用するかどうかを指定します。この設定は、contentTypeで指定されたエンコーディング、またはRequest.setCharacterEncodingメソッドを使用して明示的に設定されたエンコーディングもURLのパラメータに使用されていたTomcat 4.1.xとの互換性のために存在します。デフォルト値は 注:この属性に関する注記については、HTTPコネクタのドキュメントを参照してください。 |
useIPVHosts |
ネイティブWebサーバーによって渡されたIPアドレスを使用して、要求を送信するホストを決定させるには、この属性を |
xpoweredBy |
Tomcatが仕様で推奨されているヘッダーを使用してサーブレット仕様のサポートをアドバタイズするようにするには、この属性を |
標準実装
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 |
この**コネクタ**で使用されるソケットが閉じられる際に保持される秒数です。デフォルト値は |
connectionTimeout |
この**コネクタ**が接続を受け入れた後、リクエストURI行が表示されるまで待機するミリ秒数です。AJPプロトコルコネクタのデフォルト値は |
executor |
Executor要素内の名前への参照です。この属性が設定されていて、指定されたexecutorが存在する場合、コネクタはexecutorを使用し、他のすべてのスレッド属性は無視されます。コネクタに共有executorが指定されていない場合、コネクタはプライベートな内部executorを使用してスレッドプールを提供することに注意してください。 |
executorTerminationTimeoutMillis |
プライベートな内部executorが、コネクタの停止処理を続ける前に、リクエスト処理スレッドの終了を待機する時間です。設定されていない場合、デフォルトは |
keepAliveTimeout |
この**コネクタ**が接続を閉じる前に、別のAJPリクエストを待機するミリ秒数です。デフォルト値は、connectionTimeout属性に設定された値を使用することです。 |
maxConnections |
サーバーがいつでも受け入れ、処理する接続の最大数です。この数に達すると、サーバーはさらに1つの接続を受け入れますが、処理しません。この追加の接続は、処理中の接続数が**maxConnections**を下回るまでブロックされ、その時点でサーバーは新しい接続の受け入れと処理を再開します。制限に達すると、オペレーティングシステムは NIO/NIO2の場合のみ、値を-1に設定すると、maxConnections機能が無効になり、接続はカウントされません。 |
maxHeaderCount |
コンテナで許可されるリクエスト内のヘッダーの最大数です。指定された制限を超えるヘッダーを含むリクエストは拒否されます。0未満の値は制限なしを意味します。指定しない場合、デフォルトは100になります。 |
maxThreads |
この**コネクタ**によって作成されるリクエスト処理スレッドの最大数であり、したがって、同時に処理できるリクエストの最大数を決定します。指定しない場合、この属性は200に設定されます。executorがこのコネクタに関連付けられている場合、この属性は無視されます。コネクタは内部スレッドプールではなくexecutorを使用してタスクを実行するためです。executorが構成されている場合、この属性に設定された値は正しく記録されますが、使用されていないことを明確にするために(たとえば、JMXを介して) |
minSpareThreads |
常に実行されるスレッドの最小数です。これには、アクティブなスレッドとアイドルスレッドの両方が含まれます。指定しない場合、デフォルトの |
packetSize |
この属性は、バイト単位の最大AJPパケットサイズを設定します。最大値は65536です。mod_jkに対して構成された |
processorCache |
プロトコルハンドラは、パフォーマンスを向上させるためにProcessorオブジェクトをキャッシュします。この設定は、キャッシュされるこれらのオブジェクトの数を決定します。 |
secret |
この秘密キーワードを持つワーカーからのリクエストのみが受け入れられます。デフォルト値は |
secretRequired |
この属性が |
tcpNoDelay |
|
threadPriority |
JVM内のリクエスト処理スレッドの優先度です。デフォルト値は |
throwOnFailure |
ライフサイクル遷移中にコネクタが例外を経験した場合、例外を再スローするか、ログに記録する必要がありますか?指定しない場合、デフォルトの |
tomcatAuthentication |
Webサーバーは、 このプリンシパルには、関連付けられたロールがないことに注意してください。 デフォルト値は |
tomcatAuthorization |
|
useVirtualThreads |
(bool) この属性を使用して、内部executorでの仮想スレッドの使用を有効または無効にします。executorがこのコネクタに関連付けられている場合、この属性は無視されます。デフォルト値は |
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の場合、これは |
socket.soLingerTime |
ソケットのlingerオプション(SO_LINGER)に対する秒単位の値(int型)。標準属性のconnectionLingerに相当します。この属性と |
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) ソケットのロック解除のタイムアウト。コネクタが停止すると、自身へのコネクタを開くことでアクセプタースレッドの解放を試みます。デフォルト値は |
NIO固有の設定
以下の属性はNIOコネクタに固有です。
属性 | 説明 |
---|---|
socket.directBuffer |
(bool) ブール値。ダイレクトByteBufferを使用するかどうかを指定します。JavaマップドByteBufferを使用することも可能です。デフォルトは |
socket.appReadBufSize |
(int) Tomcatで開かれる各接続は、読み込みByteBufferに関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み込みバッファのサイズは |
socket.appWriteBufSize |
(int) Tomcatで開かれる各接続は、書き込みByteBufferに関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファのサイズは |
socket.bufferPool |
(int) NIOコネクタは、ソケットにリンクされた要素を保持するNioChannelと呼ばれるクラスを使用します。ガベージコレクションを削減するために、NIOコネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は |
socket.bufferPoolSize |
(int) NioChannelプールは、使用されていないオブジェクトベースではなく、サイズベースにすることもできます。サイズは次のように計算されます。 |
socket.processorCache |
(int) Tomcatは、ガベージコレクションを削減するためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュ内に最大で保持するオブジェクト数を指定します。デフォルトは |
socket.eventCache |
(int) Tomcatは、ガベージコレクションを削減するためにPollerEventオブジェクトをキャッシュします。整数値は、キャッシュ内に最大で保持するオブジェクト数を指定します。デフォルトは |
NIO2固有の設定
以下の属性はNIO2コネクタに固有です。
属性 | 説明 |
---|---|
useCaches |
(bool) この属性を使用して、オブジェクトキャッシングを有効または無効にし、生成されるGCオブジェクトの量を削減します。デフォルト値は |
socket.directBuffer |
(bool) ブール値。ダイレクトByteBufferを使用するかどうかを指定します。JavaマップドByteBufferを使用することも可能です。デフォルトは |
socket.appReadBufSize |
(int) Tomcatで開かれる各接続は、読み込みByteBufferに関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み込みバッファのサイズは |
socket.appWriteBufSize |
(int) Tomcatで開かれる各接続は、書き込みByteBufferに関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファのサイズは |
socket.bufferPoolSize |
(int) NIO2コネクタは、ソケットにリンクされた要素を保持するNio2Channelと呼ばれるクラスを使用します。ガベージコレクションを削減するために、NIOコネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は |
socket.processorCache |
(int) Tomcatは、ガベージコレクションを削減するためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュ内に最大で保持するオブジェクト数を指定します。デフォルトは |
ネストされたコンポーネント
現時点ではありません。
特殊機能
プロキシサポート
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 |