HTTP コネクタ
目次
はじめに
HTTP コネクタ要素は、HTTP/1.1 プロトコルをサポートするコネクタコンポーネントを表します。これにより Catalina は、サーブレットや JSP ページを実行する能力に加えて、スタンドアロンの Web サーバとしても機能することができます。このコンポーネントの特定のインスタンスは、サーバの特定の TCP ポート番号で接続をリッスンします。1 つまたは複数のこのようなコネクタは、単一のServiceの一部として設定でき、それぞれ関連付けられたEngineに転送され、リクエスト処理を実行し、レスポンスを作成します。
AJP プロトコルを使用する Web サーバ(Apache 1.3 用の mod_jk 1.2.x
コネクタなど)への接続に使用されるコネクタを設定したい場合は、AJP コネクタのドキュメントを参照してください。
各着信非同期以外のリクエストは、そのリクエストの期間中スレッドを必要とします。現在利用可能なリクエスト処理スレッドよりも多くの同時リクエストが受信された場合、設定された最大値(maxThreads
属性の値)まで追加のスレッドが作成されます。さらに多くの同時リクエストが受信された場合、現在の接続数がmaxConnections
に達するまで Tomcat は新しい接続を受け入れます。接続は、コネクタによって作成されたサーバソケット内で、接続を処理するスレッドが利用可能になるまでキューに入れられます。maxConnections
に達すると、オペレーティングシステムはさらなる接続をキューに入れます。オペレーティングシステムが提供する接続キューのサイズは、acceptCount
属性によって制御できます。オペレーティングシステムのキューが満杯になると、さらなる接続リクエストは拒否されるか、タイムアウトする可能性があります。
属性
共通属性
コネクタのすべての実装は、以下の属性をサポートしています。
属性 | 説明 |
---|---|
allowBackslash |
これが 指定されていない場合、デフォルト値の |
allowTrace |
TRACE HTTP メソッドを有効または無効にするために使用できるブール値です。指定されていない場合、この属性は false に設定されます。RFC 7231 のセクション 4.3.8 に従って、TRACE リクエストに対するレスポンスから Cookie と認証ヘッダーは除外されます。これらを含めたい場合は、ターゲットのサーブレットの |
asyncTimeout |
ミリ秒単位での非同期リクエストのデフォルトタイムアウトです。指定されていない場合、この属性はサーブレット仕様のデフォルトである 30000 (30 秒) に設定されます。 |
discardFacades |
コンテナ内部のリクエスト処理オブジェクトを分離するファサードオブジェクトのリサイクルを有効または無効にするために使用できるブール値です。 |
enableLookups |
|
encodedReverseSolidusHandling |
指定されていない場合、デフォルト値は |
encodedSolidusHandling |
指定されていない場合、デフォルト値は |
enforceEncodingInGetWriter |
これが 指定されていない場合、デフォルトの仕様準拠値である |
maxCookieCount |
リクエストで許可されるクッキーの最大数。0 未満の値は制限なしを意味します。指定されていない場合、デフォルト値の 200 が使用されます。 |
maxParameterCount |
クエリ文字列から取得される、および POST リクエストの場合、コンテンツタイプが |
maxPartCount |
コンテンツタイプが |
maxPartHeaderSize |
コンテンツタイプが |
maxPostSize |
コンテナの FORM URL パラメータ解析によって処理される POST の最大サイズ(バイト単位)。この制限は、この属性をゼロ未満の値に設定することで無効にできます。この制限を超えるリクエストは拒否されます。指定されていない場合、この属性は 2097152 (2 MiB) に設定されます。 |
maxSavePostSize |
FORM または CLIENT-CERT 認証中、または HTTP/1.1 アップグレード中に、コンテナによって保存/バッファされるリクエストボディの最大サイズ(バイト単位)。どちらの種類の認証でも、リクエストボディはユーザーが認証される前に保存/バッファされます。CLIENT-CERT 認証の場合、リクエストボディは SSL ハンドシェイクの間バッファされ、リクエストが処理されるとバッファは空になります。FORM 認証の場合、POST はユーザーがログインフォームにリダイレクトされている間に保存され、ユーザーが正常に認証されるか、認証リクエストに関連付けられたセッションの期限が切れるまで保持されます。HTTP/1.1 アップグレードの場合、リクエストボディはアップグレード処理の間バッファされます。この制限は、この属性を -1 に設定することで無効にできます。この属性をゼロに設定すると、認証中および HTTP/1.1 アップグレード中のリクエストボディデータの保存が無効になります。指定されていない場合、この属性は 4096 (4 キロバイト) に設定されます。 |
parseBodyMethods |
|
port |
このコネクタがサーバソケットを作成し、着信接続を待機する TCP ポート番号です。オペレーティングシステムは、特定の IP アドレス上の特定のポート番号で、1 つのサーバアプリケーションのみがリッスンすることを許可します。特殊な値 0 (ゼロ) が使用された場合、Tomcat はこのコネクタで使用する空いているポートをランダムに選択します。これは通常、組み込みアプリケーションやテストアプリケーションでのみ役立ちます。 |
protocol |
着信トラフィックを処理するプロトコルを設定します。デフォルト値は Java NIO ベースのコネクタを使用する |
proxyName |
このコネクタがプロキシ設定で使用されている場合、 |
proxyPort |
このコネクタがプロキシ設定で使用されている場合、 |
redirectPort |
このコネクタが非 SSL リクエストをサポートしている場合で、対応する |
rejectSuspiciousURIs |
このコネクタは、URI が Servlet 6.0 仕様で特定された疑わしい URI パターンと一致する場合にリクエストを拒否すべきですか?デフォルト値は |
scheme |
この属性を、 |
secure |
このコネクタによって受信されたリクエストに対して、 |
URIEncoding |
%xx デコード後に URI バイトをデコードするために使用される文字エンコーディングを指定します。デフォルト値は |
useBodyEncodingForURI |
URIEncoding を使用する代わりに、URI クエリパラメータに contentType で指定されたエンコーディングを使用するかどうかを指定します。この設定は、Tomcat 4.1.x との互換性のために存在します。Tomcat 4.1.x では、contentType で指定されたエンコーディング、または Request.setCharacterEncoding メソッドを使用して明示的に設定されたエンコーディングが、URL からのパラメータにも使用されました。デフォルト値は 注: 1) この設定はリクエストのクエリ文字列にのみ適用されます。 |
useIPVHosts |
Tomcat がリクエストを受信した IP アドレスを使用して、リクエストを送信するホストを決定するようにするには、この属性を |
xpoweredBy |
この属性を |
標準実装
標準 HTTP コネクタ(NIO および NIO2)はすべて、上記の共通コネクタ属性に加えて、以下の属性をサポートしています。
属性 | 説明 |
---|---|
acceptCount |
|
acceptorThreadPriority |
アクセプタースレッドの優先度です。新しい接続を受け入れるために使用されるスレッドです。デフォルト値は |
address |
複数の IP アドレスを持つサーバの場合、この属性は指定されたポートでリッスンするために使用されるアドレスを指定します。デフォルトでは、コネクタはすべてのローカルアドレスをリッスンします。JVM がシステムプロパティを使用して設定されていない限り、Java ベースのコネクタ (NIO, NIO2) は |
allowedTrailerHeaders |
デフォルトでは、Tomcat はチャンク化された入力を処理する際にすべてのトレーラーヘッダーを無視します。ヘッダーを処理するには、このカンマ区切りのヘッダー名のリストに追加する必要があります。 |
bindOnInit |
コネクタが使用するソケットがいつバインドされるかを制御します。 |
clientCertProvider |
クライアント証明書情報が |
compressibleMimeType |
HTTP 圧縮が使用される可能性のある MIME タイプをカンマで区切ったリストです。デフォルト値は |
compression |
コネクタは、サーバの帯域幅を節約するために HTTP/1.1 GZIP 圧縮を使用する場合があります。パラメータに指定できる値は、「off」(圧縮を無効にする)、「on」(圧縮を許可し、テキストデータが圧縮される)、「force」(すべての場合に圧縮を強制する)、または数値の整数値(「on」と同等ですが、出力が圧縮される前の最小データ量を指定します)です。コンテンツ長が不明で圧縮が「on」またはより積極的な設定である場合、出力も圧縮されます。指定されていない場合、この属性は「off」に設定されます。 注意: 圧縮の使用(帯域幅の節約)と sendfile 機能の使用(CPU サイクルの節約)にはトレードオフがあります。コネクタが sendfile 機能をサポートしている場合(例: NIO コネクタ)、sendfile の使用は圧縮よりも優先されます。症状としては、48 KiB より大きい静的ファイルが圧縮されずに送信されます。コネクタの |
compressionMinSize |
compression が "on" に設定されている場合、この属性は出力が圧縮される前の最小データ量を指定するために使用できます。指定されていない場合、この属性はデフォルトで "2048" になります。単位はバイトです。 |
connectionLinger |
このコネクタによって使用されるソケットが閉じられる際に保持される秒数です。デフォルト値は |
connectionTimeout |
このコネクタが、接続を受け入れた後、リクエスト URI 行が提示されるまで待機するミリ秒数です。タイムアウトしない(すなわち無限)場合は -1 を使用します。デフォルト値は 60000 (すなわち 60 秒) ですが、Tomcat に同梱されている標準の server.xml では 20000 (すなわち 20 秒) に設定されていることに注意してください。disableUploadTimeout が |
connectionUploadTimeout |
データアップロード中に使用するタイムアウトをミリ秒単位で指定します。指定されていない場合、デフォルト値は 300000 (すなわち 300 秒) です。これはdisableUploadTimeoutが |
continueResponseTiming |
|
defaultSSLHostConfigName |
セキュアな接続(このコネクタがセキュアな接続用に設定されている場合)で使用されるデフォルトのSSLHostConfigの名前です。クライアント接続が SNI を提供しない場合、または SNI が提供されるが設定されたSSLHostConfigのいずれとも一致しない場合に使用されます。指定されていない場合、デフォルト値の |
disableUploadTimeout |
このフラグは、データのアップロード中にサーブレットコンテナが異なる、通常はより長い接続タイムアウトを使用することを可能にします。指定されていない場合、この属性は |
executor |
Executor 要素内の名前への参照です。この属性が設定され、かつ指定された名前のエグゼキュータが存在する場合、コネクタはそのエグゼキュータを使用し、他のすべてのスレッド属性は無視されます。共有エグゼキュータがコネクタに指定されていない場合、コネクタはプライベートな内部エグゼキュータを使用してスレッドプールを提供することに注意してください。 |
executorTerminationTimeoutMillis |
内部プライベートエグゼキュータが、コネクタの停止処理を続行する前に、リクエスト処理スレッドが終了するのを待機する時間です。設定されていない場合、デフォルトは |
keepAliveTimeout |
このコネクタが接続を閉じる前に、次の HTTP リクエストを待機するミリ秒数です。デフォルト値は、connectionTimeout 属性に設定された値を使用することです。タイムアウトしない(つまり無限)ことを示すには -1 の値を使用します。 |
maxConnections |
サーバーが一度に受け入れ、処理する接続の最大数。この数に達すると、サーバーはさらに1つの接続を受け入れますが、処理はしません。この追加の接続は、処理中の接続数がmaxConnectionsを下回るまでブロックされ、その時点でサーバーは新しい接続の受け入れと処理を再開します。制限に達した後でも、オペレーティングシステムは NIO/NIO2 のみの場合、値を -1 に設定すると、maxConnections 機能が無効になり、接続はカウントされません。 |
maxExtensionSize |
チャンク化された HTTP リクエストにおけるチャンク拡張の合計長を制限します。値が |
maxHeaderCount |
コンテナによって許可されるリクエストのヘッダーの最大数です。指定された制限よりも多くのヘッダーを含むリクエストは拒否されます。0 未満の値は無制限を意味します。指定されていない場合、デフォルトの 100 が使用されます。 |
maxHttpHeaderSize |
maxHttpRequestHeaderSize と maxHttpResponseHeaderSize のデフォルト値を提供します。指定されていない場合、この属性は 8192 (8 KiB) に設定されます。 |
maxHttpRequestHeaderSize |
HTTP リクエストに関連付けられたリクエスト行とヘッダーの最大許容サイズ(バイト単位)です。これは受信バイト数と比較されるため、行末記号、空白、リクエスト行、ヘッダー名、ヘッダー値も含まれます。指定されていない場合、この属性は 「Request header is too large」エラーが発生した場合は、この値を増やすことができますが、Tomcat がすべてのリクエストに対して指定した全量を割り当てることに注意してください。例えば、maxHttpRequestHeaderSize を 1 MB と指定し、アプリケーションが 100 の同時リクエストを処理する場合、リクエストヘッダーによって 100 MB のヒープが消費されます。 |
maxHttpResponseHeaderSize |
HTTP レスポンスに関連付けられたレスポンスラインとヘッダーの最大許容サイズ(バイト単位)です。これは書き込まれたバイト数と比較されるため、行末記号、空白、ステータスライン、ヘッダー名、ヘッダー値も含まれます。指定されていない場合、この属性は |
maxKeepAliveRequests |
サーバーが接続を閉じるまでにパイプライン処理できる HTTP リクエストの最大数です。この属性を 1 に設定すると、HTTP/1.0 のキープアライブと、HTTP/1.1 のキープアライブおよびパイプライン処理が無効になります。これを -1 に設定すると、無制限のパイプライン処理またはキープアライブ HTTP リクエストが可能になります。指定されていない場合、この属性は 100 に設定されます。 |
maxQueueSize |
(int) 実行を待機してキューに格納できる実行可能タスクの最大数。この数を超えると拒否されます。デフォルト値は |
maxSwallowSize |
中断されたアップロードのために Tomcat が飲み込むリクエストボディの最大バイト数(転送エンコーディングのオーバーヘッドを除く)です。中断されたアップロードとは、Tomcat がリクエストボディが無視されることを知っているにもかかわらず、クライアントがそれを送信し続ける場合を指します。Tomcat がボディを飲み込まない場合、クライアントはレスポンスを見ることができない可能性があります。指定されていない場合、デフォルトの 2097152 (2 MiB) が使用されます。0 未満の値は、制限が課されないことを示します。 |
maxThreads |
このコネクタによって作成されるリクエスト処理スレッドの最大数であり、したがって処理できる同時リクエストの最大数を決定します。指定されていない場合、この属性は 200 に設定されます。このコネクタにエグゼキュータが関連付けられている場合、コネクタは内部スレッドプールではなくエグゼキュータを使用してタスクを実行するため、この属性は無視されます。エグゼキュータが設定されている場合、この属性に設定された値は正しく記録されますが、使用されていないことを明確にするために (JMX などを介して) |
maxTrailerSize |
チャンク化された HTTP リクエストの最後のチャンクにおけるトレーラーヘッダーの合計長を制限します。これは正の整数値でなければなりません。指定されていない場合、デフォルト値の |
minSpareThreads |
常に実行を維持するスレッドの最小数です。これにはアクティブスレッドとアイドルスレッドの両方が含まれます。指定されていない場合、デフォルトの |
noCompressionUserAgents |
|
processorCache |
プロトコルハンドラは、パフォーマンスを高速化するためにプロセッサオブジェクトをキャッシュします。この設定は、これらのオブジェクトのキャッシュ数を決定します。 |
relaxedPathChars |
HTTP/1.1 仕様では、URI パスで使用される特定の文字は %nn でエンコードされる必要があります。残念ながら、主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcat がそのようなリクエストを拒否しないように、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は以下の文字の任意の組み合わせにできます: |
relaxedQueryChars |
HTTP/1.1 仕様では、URI クエリ文字列で使用される特定の文字は %nn でエンコードされる必要があります。残念ながら、主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcat がそのようなリクエストを拒否しないように、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は以下の文字の任意の組み合わせにできます: |
restrictedUserAgents |
|
server |
HTTP レスポンスの Server ヘッダーを上書きします。設定されている場合、この属性の値は Web アプリケーションによって設定された Server ヘッダーをすべて上書きします。設定されていない場合、アプリケーションによって指定された値が使用されます。アプリケーションが値を指定しない場合、Server ヘッダーは設定されません。 |
serverRemoveAppProvidedValues |
|
SSLEnabled |
この属性を使用して、コネクタでの SSL トラフィックを有効にします。コネクタでの SSL ハンドシェイク/暗号化/復号をオンにするには、この値を |
tcpNoDelay |
|
threadPriority |
JVM 内のリクエスト処理スレッドの優先度です。デフォルト値は |
threadsMaxIdleTime |
エグゼキュータに |
throwOnFailure |
コネクタがライフサイクル遷移中に例外を経験した場合、その例外を再スローすべきか、それともログに記録すべきか?指定されていない場合、デフォルトの |
useAsyncIO |
(bool) 非同期 IO API の使用を有効または無効にするためにこの属性を使用します。デフォルト値は |
useKeepAliveResponseHeader |
(bool) このインターネットドラフトに記載されている |
useVirtualThreads |
(bool) 内部エグゼキュータでの仮想スレッドの使用を有効または無効にするためにこの属性を使用します。このコネクタにエグゼキュータが関連付けられている場合、この属性は無視されます。デフォルト値は |
Java TCP ソケット属性
NIO および NIO2 実装は、上記の共通コネクタ属性および HTTP 属性に加えて、以下の Java TCP ソケット属性をサポートしています。
属性 | 説明 |
---|---|
socket.rxBufSize |
(int) ソケット受信バッファ (SO_RCVBUF) のサイズ(バイト単位)。設定されていない場合は JVM のデフォルトが使用されます。 |
socket.txBufSize |
(int) ソケット送信バッファ (SO_SNDBUF) のサイズ(バイト単位)。設定されていない場合は JVM のデフォルトが使用されます。この値を明示的に設定する場合は注意が必要です。一部の JVM では、約 8KB 未満の値で非常に低いパフォーマンスが観測されています。 |
socket.tcpNoDelay |
(bool) これは標準属性tcpNoDelayと同等です。 |
socket.soKeepAlive |
(bool) ソケットのキープアライブ設定 (SO_KEEPALIVE) のブール値です。設定されていない場合は JVM のデフォルトが使用されます。 |
socket.ooBInline |
(bool) ソケット OOBINLINE 設定のブール値です。設定されていない場合は JVM のデフォルトが使用されます。 |
socket.soReuseAddress |
(bool) ソケットの再利用アドレスオプション (SO_REUSEADDR) のブール値です。設定されていない場合は JVM のデフォルトが使用されます。 |
socket.soLingerOn |
(bool) ソケットの soLinger オプション (SO_LINGER) のブール値です。標準属性connectionLingerの値が 0 以上であることは、これを |
socket.soLingerTime |
(int) ソケットの soLinger オプション (SO_LINGER) の秒数での値です。これは標準属性connectionLingerと同等です。この属性と |
socket.soTimeout |
これは標準属性connectionTimeoutと同等です。 |
socket.performanceConnectionTime |
(int) パフォーマンス設定の最初の値です。ソケットパフォーマンスオプションを参照してください。3つのパフォーマンス属性すべてを設定しないと、3つすべてに JVM のデフォルトが使用されます。 |
socket.performanceLatency |
(int) パフォーマンス設定の2番目の値です。ソケットパフォーマンスオプションを参照してください。3つのパフォーマンス属性すべてを設定しないと、3つすべてに JVM のデフォルトが使用されます。 |
socket.performanceBandwidth |
(int) パフォーマンス設定の3番目の値です。ソケットパフォーマンスオプションを参照してください。3つのパフォーマンス属性すべてを設定しないと、3つすべてに JVM のデフォルトが使用されます。 |
socket.unlockTimeout |
(int) ソケットのアンロックのタイムアウトです。コネクタが停止されると、自身にコネクタを開くことでアクセプタスレッドを解放しようとします。デフォルト値は |
NIO 固有の設定
以下の属性はNIOコネクタに固有です。
属性 | 説明 |
---|---|
pollerThreadPriority |
(int) ポーラースレッドの優先度です。デフォルト値は |
selectorTimeout |
(int) ポーラーの select() タイムアウト時間(ミリ秒単位)です。この値は重要です。なぜなら、接続のクリーンアップが同じスレッドで行われるため、極端に高い値に設定しないでください。デフォルト値は |
useSendfile |
(bool) sendfile 機能を有効または無効にするためにこの属性を使用します。デフォルト値は |
socket.directBuffer |
(bool) ダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。 |
socket.directSslBuffer |
(bool) SSL バッファにダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。 |
socket.appReadBufSize |
(int) Tomcat で開かれる各接続は、読み取り ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファは |
socket.appWriteBufSize |
(int) Tomcat で開かれる各接続は、書き込み ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファは |
socket.bufferPool |
(int) NIOx コネクタは、ソケットにリンクされた要素を保持する NioXChannel と呼ばれるクラスを使用します。ガベージコレクションを減らすために、NIOx コネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は |
socket.bufferPoolSize |
(int) NioXChannel プールは、オブジェクトベースではなく、サイズベースで設定することもできます。bufferPool が -2 ではない場合、この値は使用されません。 |
socket.processorCache |
(int) Tomcatはガベージコレクションを減らすためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは |
socket.eventCache |
(int) Tomcatはガベージコレクションを減らすためにPollerEventオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは |
unixDomainSocketPath |
サポートされている場合、このコネクタが作成し、着信接続を待機する Unix ドメインソケットへのパスです。これが指定されている場合、通常必須である |
unixDomainSocketPathPermissions |
サポートされている場合、上記の |
useInheritedChannel |
(bool) このコネクタが inetd/systemd ネットワークソケットを継承するかどうかを定義します。1 つのコネクタのみがネットワークソケットを継承できます。このオプションは、systemd スーパーデーモンのポートへの接続要求が行われたときに Tomcat を自動的に起動するために使用できます。デフォルト値は |
NIO2 固有の設定
以下の属性はNIO2コネクタに固有です。
属性 | 説明 |
---|---|
useSendfile |
(bool) sendfile 機能を有効または無効にするためにこの属性を使用します。デフォルト値は |
socket.directBuffer |
(bool) ダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。 |
socket.directSslBuffer |
(bool) SSL バッファにダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。 |
socket.appReadBufSize |
(int) Tomcat で開かれる各接続は、読み取り ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファは |
socket.appWriteBufSize |
(int) Tomcat で開かれる各接続は、書き込み ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファは |
socket.bufferPool |
(int) NIO2 コネクタは、ソケットにリンクされた要素を保持する Nio2Channel と呼ばれるクラスを使用します。ガベージコレクションを減らすために、NIO2 コネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は |
socket.processorCache |
(int) Tomcatはガベージコレクションを減らすためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは |
ネストされたコンポーネント
Tomcat はサーバー名表示 (SNI) をサポートしています。これにより、複数の SSL 設定を単一のセキュアコネクタに関連付けることができ、特定の接続で使用される設定はクライアントが要求したホスト名によって決定されます。これを容易にするために、これらの設定の1つを定義するために使用できるSSLHostConfig要素が追加されました。任意の数のSSLHostConfigをConnector内にネストできます。同時に、単一のSSLHostConfigに複数の証明書を関連付けるサポートが追加されました。したがって、各 SSL 証明書は、SSLHostConfig内のCertificate要素に設定されます。詳細については、以下の SSL サポートセクションを参照してください。
OpenSSL が TLS 実装を提供している場合、OpenSSL の SSL_CONF
API を介して OpenSSL を設定するために、1 つ以上の OpenSSLConfCmd 要素を OpenSSLConf 要素内にネストできます。単一の OpenSSLConf 要素は、SSLHostConfig 要素内にネストできます。詳細については、以下の SSL サポートセクションを参照してください。
特殊機能
HTTP/1.1 および HTTP/1.0 のサポート
このコネクタは、RFC 7230-7235 に記述されている HTTP/1.1 プロトコルの必要なすべての機能をサポートしています。これには、持続的接続、パイプライン処理、期待、チャンクエンコーディングが含まれます。クライアントが HTTP/1.0 または HTTP/0.9 のみをサポートしている場合でも、このコネクタはこれらのプロトコルを適切にサポートするようにフォールバックします。このサポートを有効にするための特別な設定は必要ありません。このコネクタは HTTP/1.0 のキープアライブもサポートしています。
RFC 7230 は、HTTP サーバが常にサポートすると主張する最高の HTTP バージョンで応答を開始することを要求しています。したがって、このコネクタは常に応答の開始時に HTTP/1.1
を返します。
HTTP/2 のサポート
HTTP/2 サポートは、TLS (h2)、HTTP アップグレード経由の非 TLS (h2c)、および直接 HTTP/2 (h2c) 接続に対して提供されます。HTTP コネクタで HTTP/2 サポートを有効にするには、以下のUpgradeProtocol要素をConnector内にネストし、className属性をorg.apache.coyote.http2.Http2Protocol
に設定する必要があります。
<Connector ... >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
追加の設定属性が利用可能です。詳細については、HTTP/2 アップグレードプロトコルのドキュメントを参照してください。
プロキシのサポート
proxyName
および proxyPort
属性は、Tomcat がプロキシサーバーの背後で実行されている場合に使用できます。これらの属性は、request.getServerName()
および request.getServerPort()
メソッドを呼び出す Web アプリケーションに返される値を変更します。これらのメソッドは、リダイレクトのための絶対 URL を構築するためによく使用されます。これらの属性を設定しない場合、返される値は、クライアントが元のリクエストを送信したサーバー名とポートではなく、プロキシサーバーからの接続が受信されたサーバー名とポートを反映することになります。
詳細については、プロキシのサポート方法を参照してください。
Unix ドメインソケットのサポート
unixDomainSocketPath
属性が使用される場合、Unixドメインソケットをサポートするコネクタは、指定されたパスのソケットにバインドします。
Java 16 以降のユーザー向けに、NIO コネクタ内でサポートが提供されています。
ソケットパスは、すべてのユーザーに対して読み書き権限で作成されます。このソケットを保護するには、適切な権限で適切に設定されたディレクトリに配置し、必要に応じてアクセスを制限してください。または、posix 権限をサポートするプラットフォームでは、unixDomainSocketPathPermissions
オプションを使用してソケットの権限を直接設定できます。
Tomcat はサーバーシャットダウン時にソケットを自動的に削除します。ソケットが既に存在する場合、起動は失敗します。管理者は、既存の Tomcat プロセスによってソケットがすでに使用されていないことを確認した後、ソケットを削除するように注意する必要があります。
Unix ドメインソケットは、curl
コマンドラインクライアントの --unix-socket
オプションと、Apache HTTP サーバーの mod_proxy
モジュール内の Unix ドメインソケットサポートを使用してアクセスできます。
SSL のサポート
このコネクタの特定のインスタンスで SSL サポートを有効にするには、SSLEnabled
属性を true
に設定します。
また、サーブレットに正しい情報を渡すために、scheme
属性を https
に、secure
属性を true
にそれぞれ設定する必要があります。
NIO および NIO2 コネクタは、JSSE Java SSL 実装または OpenSSL 実装のいずれかを使用します。可能な限り、JSSE と OpenSSL の両方で共通の設定属性が使用されます。
各セキュアコネクタは、少なくとも1つのSSLHostConfigを定義する必要があります。SSLHostConfig要素の名前は一意である必要があり、そのうちの1つはConnectorのdefaultSSLHostConfigName
属性と一致する必要があります。
各SSLHostConfigは、次に少なくとも1つのCertificateを定義する必要があります。Certificateのタイプは一意である必要があります。
サーブレット仕様のセクション 3.10 で定義されている標準の TLS 関連リクエスト属性に加えて、Tomcat は追加の TLS 関連属性を多数サポートしています。完全なリストはSSLSupport Javadocにあります。
詳細については、SSL 設定方法を参照してください。
SSL サポート - SSLHostConfig
属性 | 説明 |
---|---|
certificateRevocationListFile |
証明書局の連結された証明書失効リストを含むファイルの名前です。形式は PEM エンコードです。定義されていない場合、クライアント証明書は証明書失効リストと照合されません (OpenSSL ベースのコネクタが使用され、certificateRevocationListPath が定義されている場合を除く)。相対パスは |
certificateRevocationListPath |
OpenSSL のみ。 証明書認証局の証明書失効リストを含むディレクトリの名前です。形式は PEM エンコードです。相対パスは |
certificateVerification |
接続を受け入れる前に、SSL スタックがクライアントから有効な証明書チェーンを要求するようにしたい場合は、 |
certificateVerificationDepth |
クライアント証明書を検証する際に許可される中間証明書の最大数です。指定されていない場合、デフォルト値の 10 が使用されます。 |
caCertificateFile |
OpenSSL のみ。 信頼された認証局の連結された証明書を含むファイルの名前です。形式は PEM エンコードです。 |
caCertificatePath |
OpenSSL のみ。 信頼された認証局の証明書を含むディレクトリの名前です。形式は PEM エンコードです。 |
ciphers |
OpenSSL 構文を使用して有効にする暗号です。(サポートされている暗号のリストと構文については、OpenSSL ドキュメントを参照してください)。あるいは、標準の OpenSSL 暗号名または標準の JSSE 暗号名を使用したカンマ区切りの暗号リストを使用することもできます。 OpenSSL のバージョンが異なると、同じ暗号文字列でも解釈が異なる場合があります。例えば、OpenSSL 3.2 では SSL 実装でサポートされている暗号のみが使用されます。デフォルト以外の暗号文字列から派生したリストに含まれる暗号のうち、SSL 実装でサポートされていないものは、コネクタの起動時に 指定されていない場合、デフォルト (OpenSSL 記法を使用) の デフォルトでは、暗号の定義順序が優先順序として扱われることに注意してください。 |
disableCompression |
OpenSSL のみ。 圧縮を無効にするかどうかを設定します。デフォルトは |
disableSessionTickets |
OpenSSL のみ。
|
honorCipherOrder |
クライアントが暗号を選択することを許可する代わりに、サーバーの暗号順序( |
hostName |
SSL ホストの名前です。これは完全修飾ドメイン名(例: |
insecureRenegotiation |
OpenSSL のみ。 安全でない再ネゴシエーションが許可されるかどうかを設定します。デフォルトは |
keyManagerAlgorithm |
JSSE のみ。 使用される |
protocols |
クライアントと通信する際にサポートするプロトコルの名前です。これは、以下の任意の組み合わせのリストである必要があります。
リスト内の各トークンは、プラス記号 ("+") またはマイナス記号 ("-") を接頭辞として付けることができます。プラス記号はプロトコルを追加し、マイナス記号は現在のリストから削除します。リストは空のリストから構築されます。 トークン
指定されていない場合、デフォルト値の |
revocationEnabled |
JSSE のみ。 JSSE プロバイダーは証明書失効チェックを有効にすべきですか?certificateRevocationListFileが設定されている場合、この属性は無視され、失効チェックは常に有効になります。この属性は、他の方法で現在の JSSE プロバイダーに設定された失効チェックを有効にすることを目的としています。指定されていない場合、デフォルトの |
sessionCacheSize |
セッションキャッシュに保持する SSL セッションの数です。実装のデフォルトを使用するには |
sessionTimeout |
SSL セッションが作成されてからタイムアウトするまでの時間(秒単位)。実装のデフォルトを使用するには |
sslProtocol |
JSSE のみ。 使用する SSL プロトコル(単一の値で複数のプロトコルが有効になる場合があります - 詳細については JVM ドキュメントを参照してください)。指定されていない場合、デフォルトは |
trustManagerClassName |
JSSE のみ。 クライアント証明書を検証するために使用するカスタムのトラストマネージャクラスの名前です。このクラスは引数なしのコンストラクタを持ち、かつ |
truststoreAlgorithm |
JSSE のみ。 トラストストアに使用するアルゴリズムです。指定されていない場合、 |
truststoreFile |
JSSE のみ。 クライアント証明書を検証するために使用するトラストストアファイルです。デフォルトは |
truststorePassword |
JSSE のみ。 トラストストアにアクセスするためのパスワードです。デフォルトは |
truststoreProvider |
JSSE のみ。 サーバー証明書に使用されるトラストストアプロバイダーの名前です。デフォルトは |
truststoreType |
JSSE のみ。 トラストストアに使用されるキーストアのタイプです。デフォルトは |
SSL サポート - Certificate
属性 | 説明 |
---|---|
certificateFile |
サーバー証明書を含むファイルの名前です。形式は PEM エンコードです。相対パスは 証明書に加えて、このファイルにはオプション要素として、 この属性は、certificateKeystoreFileが指定されていない限り必須です。 |
certificateChainFile |
使用されるサーバー証明書に関連付けられた証明書チェーンを含むファイルの名前です。形式は PEM エンコードです。相対パスは Tomcat で使用される証明書チェーンには、最初の要素としてサーバー証明書を含めるべきではありません。 異なるタイプに対して複数の証明書を使用する場合、それらはすべて同じ証明書チェーンを使用する必要があることに注意してください。 |
certificateKeyAlias |
JSSE のみ。 キーストア内のサーバーキーと証明書に使用されるエイリアス。指定されていない場合、キーストアから読み込まれる最初のキーが使用されます。キーストアからキーが読み込まれる順序は実装依存です。キーが追加された順序と同じ順序でキーストアから読み込まれるとは限りません。キーストアに複数のキーが存在する場合、正しいキーが使用されるように `keyAlias` を設定することを強く推奨します。 |
certificateKeyFile |
サーバーの秘密鍵を含むファイルの名前。形式はPEMエンコードです。デフォルト値は certificateFile の値であり、この場合、証明書と秘密鍵の両方がこのファイルに含まれている必要があります(非推奨)。相対パスは |
certificateKeyPassword |
指定されたファイルから、サーバー証明書に関連付けられた秘密鍵にアクセスするために使用されるパスワード。 指定されていない場合、JSSE のデフォルトの動作では certificateKeystorePassword が使用されます。OpenSSL の場合、デフォルトの動作はパスワードを使用しないことですが、必要に応じてOpenSSLがパスワードの入力を求めます。 |
certificateKeyPasswordFile |
指定されたファイルから、サーバー証明書に関連付けられた秘密鍵にアクセスするために使用されるパスワードファイル。この属性は certificateKeyPassword よりも優先されます。 指定されていない場合、JSSE のデフォルトの動作では certificateKeystorePasswordFile が使用されます。OpenSSL の場合、デフォルトの動作はパスワード(ファイル)を使用しないことですが、必要に応じてOpenSSLがパスワードの入力を求めます。 |
certificateKeystoreFile |
JSSE のみ。 ロードするサーバー証明書とキーが格納されているキーストアファイルのパス名。デフォルトでは、Tomcatを実行しているユーザーのオペレーティングシステムのホームディレクトリにあるファイル この属性は、certificateFile が指定されていない限り必須です。 |
certificateKeystorePassword |
JSSE のみ。 サーバーの秘密鍵と証明書を含むキーストアにアクセスするために使用するパスワード。指定されていない場合、デフォルトの |
certificateKeystorePasswordFile |
JSSE のみ。 サーバーの秘密鍵と証明書を含むキーストアにアクセスするために使用するパスワードファイル。この属性は certificateKeystorePassword よりも優先されます。 |
certificateKeystoreProvider |
JSSE のみ。 サーバー証明書に使用されるキーストアプロバイダーの名前。指定されていない場合、システムプロパティ |
certificateKeystoreType |
JSSE のみ。 サーバー証明書に使用されるキーストアファイルのタイプ。指定されていない場合、システムプロパティ |
type |
証明書のタイプ。これは、証明書と互換性のある暗号を識別するために使用されます。 |
SSL サポート - Connector - NIO および NIO2
APR/native が有効になっている場合、コネクタはデフォルトでJSSEを介してOpenSSLを使用します。これは、使用されているプロセッサによってはJSSE Java実装よりも最適化されており、多くの商用アクセラレータコンポーネントで補完できます。
OpenSSL FFMサポートが有効になっている場合、コネクタはデフォルトでJSSEを介してOpenSSLを使用します。これは同等ですが、Java 22のJava FFM APIを使用してOpenSSLにアクセスします。
以下のNIOおよびNIO2 SSL設定属性は仮想ホストに固有のものではないため、コネクタ上で設定する必要があります。
属性 | 説明 |
---|---|
sniParseLimit |
SNIサポートを実装するために、Tomcatは新しいTLS接続で受信した最初のTLSメッセージ(クライアントハロー)を解析して、要求されたサーバー名を抽出する必要があります。このメッセージは、通常のTLS処理のためにJSSE実装に渡せるようにバッファリングする必要があります。理論的には、この最初のメッセージは非常に大きくなる可能性がありますが、実際には通常数百バイトです。この属性は、Tomcatがバッファする最大メッセージサイズを設定します。メッセージがこのサイズを超えると、クライアントによってサーバー名が指定されなかったかのように接続が構成されます。指定されていない場合、デフォルトの |
sslImplementationName |
使用するSSL実装のクラス名。指定されておらず、tomcat-nativeライブラリがインストールされていない場合、JVMのデフォルトJSSEプロバイダーをラップするデフォルトの |
SSL サポート - OpenSSL の SSL_CONF API
OpenSSLがTLS実装を提供している場合、OpenSSLの SSL_CONF
APIを介してOpenSSLを設定するために、1つ以上の OpenSSLConfCmd 要素を OpenSSLConf 要素内にネストできます。1つの OpenSSLConf 要素は SSLHostConfig 要素内にネストできます。
利用可能な設定ファイルコマンドのセットは、使用されているOpenSSLのバージョンに依存します。サポートされているコマンド名と値のリストについては、OpenSSLの SSL_CONF_cmd(3) マニュアルページの「Supported configuration file commands」セクションを参照してください。一部の設定ファイルコマンドは、SSLHostConfig 属性の代替として使用できます。設定ファイルコマンドは、その機能が SSLHostConfig 属性を使用して設定できない場合にのみ使用することを推奨します。
OpenSSLConf 要素は属性をサポートしていません。
OpenSSLConfCmd 要素は以下の属性をサポートしています。
属性 | 説明 |
---|---|
name |
設定ファイルコマンドの名前。 |
value |
設定ファイルコマンドに使用する値。 |
キーストアの種類
標準のキーストアタイプ(JKSおよびPKCS12)に加えて、ほとんどのJavaランタイムは、Windows-ROOT、Windows-My、DKSなどの追加のキーストアタイプ、およびハードウェアセキュリティモジュールをサポートしています。一般的に、Tomcatでこれらの追加のキーストアタイプをTLSコネクタとともに使用するには
- certificateKeystoreType および/または truststoreType Connector属性(必要に応じて)を適切なタイプに設定します。
- 設定ファイルが必要な場合は、certificateKeystoreFile および/または truststoreFile Connector属性(必要に応じて)をそのファイルを指すように設定します。
- 設定ファイルが不要な場合は、certificateKeystoreFile および/または truststoreFile Connector属性(必要に応じて)を明示的に空の文字列("")に設定することがほぼ確実に必要になります。
- パスワードが必要な場合は、certificateKeystorePassword および/または truststorePassword Connector属性(必要に応じて)を要求されるパスワードに設定します。
- パスワードが不要な場合は、certificateKeystorePassword および/または truststorePassword Connector属性(必要に応じて)を明示的に空の文字列("")に設定することがほぼ確実に必要になります。
キーストア実装のバリエーションと、JSSEとOpenSSLの設定スタイル間の相互運用性を可能にするためにTomcatがバックグラウンドで行うキーストア操作を組み合わせると、一部のキーストアではわずかに異なる設定が必要になる場合があります。Apache Tomcat ユーザーメーリングリストでは、常に支援が利用可能です。上記の助言と異なるキーストアについては、ここに文書化することを目指しています。現在、私たちが認識しているものはありません。
コネクタの比較
以下は、コネクタがどのように異なるかを示す小さな表です。
Java Nio コネクタ NIO |
Java Nio2 コネクタ NIO2 |
|
---|---|---|
クラス名 | Http11NioProtocol |
Http11Nio2Protocol |
Tomcat バージョン | 6.0.x 以降 | 8.0.x 以降 |
ポーリングのサポート | はい | はい |
ポーリングサイズ | maxConnections |
maxConnections |
リクエストヘッダーの読み取り | 非ブロッキング | 非ブロッキング |
リクエストボディの読み取り | ブロッキング | ブロッキング |
レスポンスヘッダーとボディの書き込み | ブロッキング | ブロッキング |
次のリクエストを待機 | 非ブロッキング | 非ブロッキング |
SSL のサポート | Java SSL または OpenSSL | Java SSL または OpenSSL |
SSLハンドシェイク | 非ブロッキング | 非ブロッキング |
最大接続数 | maxConnections |
maxConnections |