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