HTTPコネクタ
目次
はじめに
**HTTPコネクタ**要素は、HTTP/1.1プロトコルをサポートする**コネクタ**コンポーネントを表します。これにより、CatalinaはサーブレットやJSPページを実行する機能に加えて、スタンドアロンのWebサーバーとして機能できます。このコンポーネントの特定のインスタンスは、サーバー上の特定のTCPポート番号で接続を待ち受けます。このような**コネクタ**は、1つのService内に複数設定でき、それぞれ関連付けられたEngineに転送してリクエスト処理を行い、レスポンスを作成します。
AJPプロトコル(Apache 1.3のmod_jk 1.2.x
コネクタなど)を使用してWebサーバーへの接続に使用する**コネクタ**を設定する場合は、AJPコネクタのドキュメントを参照してください。
非同期ではない各着信リクエストには、そのリクエストの期間中、1つのスレッドが必要です。現在使用可能なリクエスト処理スレッドで処理できる数よりも多くの同時リクエストが受信された場合、構成された最大数(maxThreads
属性の値)まで追加のスレッドが作成されます。それでもさらに同時リクエストが受信された場合、Tomcatは、現在の接続数がmaxConnections
に達するまで新しい接続を受け入れます。接続は、**コネクタ**によって作成されたサーバーソケット内で、スレッドが接続の処理に使用可能になるまでキューに入れられます。maxConnections
に達すると、オペレーティングシステムはさらに接続をキューに入れます。オペレーティングシステムが提供する接続キューのサイズは、acceptCount
属性で制御できます。オペレーティングシステムのキューがいっぱいになると、さらに接続要求が拒否されるか、タイムアウトする可能性があります。
属性
共通属性
**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(2MiB)に設定されます。 |
maxSavePostSize |
FORM認証またはクライアント証明書認証中、またはHTTP/1.1アップグレード中に、コンテナによって保存/バッファリングされるリクエスト本文の最大サイズ(バイト単位)。両方のタイプの認証では、ユーザーが認証される前にリクエスト本文が保存/バッファリングされます。クライアント証明書認証の場合、リクエスト本文はSSLハンドシェイクの期間中バッファリングされ、リクエストが処理されるときにバッファが空になります。FORM認証の場合、ユーザーがログインフォームにリダイレクトされている間、POSTが保存され、ユーザーが正常に認証されるまで、または認証リクエストに関連付けられたセッションが期限切れになるまで保持されます。HTTP/1.1アップグレードの場合、リクエスト本文はアップグレード処理の期間中バッファリングされます。この属性を-1に設定することにより、制限を無効にできます。属性を0に設定すると、認証とHTTP/1.1アップグレード中のリクエスト本文データの保存が無効になります。指定されていない場合、この属性は4096(4キロバイト)に設定されます。 |
parseBodyMethods |
|
port |
この**コネクタ**がサーバーソケットを作成して着信接続を待つTCPポート番号です。オペレーティングシステムでは、特定のIPアドレス上の特定のポート番号をリッスンするサーバーアプリケーションを1つだけ許可します。特別な値0(ゼロ)を使用すると、Tomcatはこのコネクタに使用する空きポートをランダムに選択します。これは通常、組み込みアプリケーションやテストアプリケーションでのみ役立ちます。 |
protocol |
着信トラフィックを処理するプロトコルを設定します。デフォルト値は |
proxyName |
この**コネクタ**をプロキシ構成で使用している場合、 |
proxyPort |
この**コネクタ**をプロキシ構成で使用している場合、 |
redirectPort |
この**コネクタ**が非SSLリクエストをサポートしており、一致する |
rejectSuspiciousURIs |
この**コネクタ**は、URIがサーブレット6.0仕様で特定された疑わしいURIパターンのいずれかに一致する場合、リクエストを拒否する必要がありますか?デフォルト値は |
scheme |
|
secure |
この属性を |
URIEncoding |
これは、URLの%xxデコード後にURIバイトをデコードするために使用される文字エンコーディングを指定します。デフォルト値は |
useBodyEncodingForURI |
これは、URIクエリパラメータにURIEncodingではなくcontentTypeで指定されたエンコーディングを使用するかどうかを指定します。この設定は、contentTypeで指定されたエンコーディング、またはRequest.setCharacterEncodingメソッドを使用して明示的に設定されたエンコーディングがURLのパラメータにも使用されていたTomcat 4.1.xとの互換性のために存在します。デフォルト値は 注記: 1) この設定は、リクエストのクエリ文字列のみに適用されます。 |
useIPVHosts |
この属性を |
xpoweredBy |
この属性を |
標準実装
標準のHTTPコネクタ(NIOとNIO2)は、上記の共通のコネクタ属性に加えて、次の属性もすべてサポートしています。
属性 | 説明 |
---|---|
acceptCount |
|
acceptorThreadPriority |
アクセプタースレッドの優先度。新しい接続を受け入れるために使用されるスレッドです。デフォルト値は |
address |
複数のIPアドレスを持つサーバーの場合、この属性は、指定されたポートでリスンするために使用されるアドレスを指定します。デフォルトでは、コネクタはすべてのローカルアドレスでリスンします。システムプロパティを使用してJVMが別様に構成されていない限り、Javaベースのコネクタ(NIO、NIO2)は、 |
allowHostHeaderMismatch |
デフォルトでは、Tomcatはリクエスト行にホストを指定し、ホストヘッダーに異なるホストを指定するリクエストを拒否します。この属性を |
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 |
データのアップロード中に使用するタイムアウト(ミリ秒単位)を指定します。これは、disableUploadTimeoutが |
continueResponseTiming |
|
defaultSSLHostConfigName |
クライアント接続がSNIを提供しない場合、またはSNIが提供されているが構成されたSSLHostConfigと一致しない場合に、(このコネクタがセキュア接続用に構成されている場合)セキュア接続に使用されるデフォルトのSSLHostConfigの名前です。指定しない場合、デフォルト値の |
disableUploadTimeout |
このフラグにより、サーブレットコンテナは、データアップロード中に異なる、通常はより長い接続タイムアウトを使用できます。指定しない場合、この属性は |
executor |
Executor要素の名前への参照です。この属性が設定されていて、指定されたexecutorが存在する場合、コネクタはexecutorを使用し、他のすべてのスレッド属性は無視されます。コネクタに共有executorが指定されていない場合、コネクタはプライベートな内部executorを使用してスレッドプールを提供することに注意してください。 |
executorTerminationTimeoutMillis |
プライベートな内部executorが、コネクタの停止プロセスを続行する前に、リクエスト処理スレッドの終了を待機する時間です。設定されていない場合、デフォルトは |
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を1MBに指定し、アプリケーションが100の同時リクエストを処理する場合、リクエストヘッダーによって100MBのヒープが消費されます。 |
maxHttpResponseHeaderSize |
HTTPレスポンスに関連付けられたレスポンスラインとヘッダーの最大許容サイズ(バイト単位)。これは書き込まれたバイト数と比較されるため、改行文字、空白文字、ステータスライン、ヘッダー名、ヘッダー値が含まれます。指定されていない場合、この属性は |
maxKeepAliveRequests |
サーバーによって接続が閉じられるまで、パイプライン化できるHTTPリクエストの最大数。この属性を1に設定すると、HTTP/1.0 keep-aliveとHTTP/1.1 keep-aliveおよびパイプライン処理が無効になります。-1に設定すると、パイプライン化またはkeep-aliveされたHTTPリクエストの数が無制限になります。指定されていない場合、この属性は100に設定されます。 |
maxSwallowSize |
中断されたアップロードに対してTomcatによって取り込まれるリクエストボディバイト数(転送エンコーディングのオーバーヘッドを除く)の最大数。中断されたアップロードとは、Tomcatがリクエストボディが無視されることを認識しているが、クライアントが依然として送信している場合です。Tomcatがボディを取り込まない場合、クライアントはレスポンスが表示されない可能性があります。指定されていない場合、デフォルトの2097152(2MiB)が使用されます。0未満の値は、制限を適用しないことを示します。 |
maxThreads |
この**コネクタ**によって作成されるリクエスト処理スレッドの最大数。したがって、同時に処理できるリクエストの最大数を決定します。指定されていない場合、この属性は200に設定されます。このコネクタにexecutorが関連付けられている場合、この属性は無視されます。コネクタは内部のスレッドプールではなく、executorを使用してタスクを実行するためです。executorが設定されている場合、この属性に設定された値は正しく記録されますが、(JMXなどを介して) |
maxTrailerSize |
チャンク化されたHTTPリクエストの最後のチャンクにあるトレーリングヘッダーの総長を制限します。値が |
minSpareThreads |
常に実行されるスレッドの最小数。アクティブなスレッドとアイドルスレッドの両方が含まれます。指定されていない場合、デフォルトの |
noCompressionUserAgents |
この値は、 |
processorCache |
プロトコルハンドラーは、Processorオブジェクトをキャッシュしてパフォーマンスを向上させます。この設定は、キャッシュされるこれらのオブジェクトの数を決定します。 |
rejectIllegalHeader |
不正なヘッダー名または値(例:ヘッダー名がトークンではない)を含むHTTPリクエストが受信された場合、この設定は、リクエストを400レスポンス( |
relaxedPathChars |
HTTP/1.1仕様では、URIパスで使用される特定の文字を%nnエンコードする必要があります。残念ながら、すべての主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcatがそのようなリクエストを拒否するのを防ぐために、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は、次の文字の任意の組み合わせにすることができます: |
relaxedQueryChars |
HTTP/1.1仕様では、URIクエリ文字列で使用される特定の文字を%nnエンコードする必要があります。残念ながら、すべての主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcatがそのようなリクエストを拒否するのを防ぐために、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は、次の文字の任意の組み合わせにすることができます: |
restrictedUserAgents |
この値は、クライアントがこれらの機能のサポートを表明していても、HTTP/1.1またはHTTP/1.0 keep-aliveを使用すべきではないHTTPクライアントの |
server |
HTTPレスポンスのServerヘッダーをオーバーライドします。設定されている場合、この属性の値は、Webアプリケーションによって設定されたServerヘッダーをオーバーライドします。設定されていない場合、アプリケーションによって指定された値が使用されます。アプリケーションが値を指定しない場合、Serverヘッダーは設定されません。 |
serverRemoveAppProvidedValues |
|
SSLEnabled |
この属性を使用して、コネクタでSSLトラフィックを有効にします。コネクタでSSLハンドシェイク/暗号化/復号化を有効にするには、この値を |
tcpNoDelay |
|
threadPriority |
JVM内でのリクエスト処理スレッドの優先度。デフォルト値は |
threadsMaxIdleTime |
executorに |
throwOnFailure |
ライフサイクル遷移中にコネクタが例外を経験した場合、例外を再スローするか、ログに記録しますか?指定されていない場合、デフォルトの |
useAsyncIO |
(bool) この属性を使用して、非同期IO APIの使用を有効または無効にします。デフォルト値は |
useKeepAliveResponseHeader |
(bool) このインターネットドラフトで説明されているように、 |
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オプション(SO_LINGER)のブール値。標準属性**connectionLinger**の値が>=0であることは、これを |
socket.soLingerTime |
(int) ソケットのso lingerオプション(SO_LINGER)の値(秒単位)。これは標準属性**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コネクタに固有です。
属性 | 説明 |
---|---|
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設定を単一セキュアコネクタに関連付けることができ、クライアントによって要求されたホスト名によって、任意の接続に使用される設定が決まります。これを容易にするために、SSLHostConfig要素が追加され、これらの設定の1つを定義するために使用できます。任意の数のSSLHostConfigをコネクタにネストできます。同時に、単一のSSLHostConfigに複数の証明書を関連付けるためのサポートが追加されました。したがって、各SSL証明書はSSLHostConfig内のCertificate要素で設定されます。詳細については、以下のSSLサポートセクションを参照してください。
OpenSSLがTLS実装を提供している場合、OpenSSLのSSL_CONF
APIを介してOpenSSLを設定するために、OpenSSLConf要素内に1つ以上のOpenSSLConfCmd要素をネストできます。単一の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アップグレード(h2c)を介した非TLS、および直接HTTP/2(h2c)接続に対して提供されます。HTTPコネクタのHTTP/2サポートを有効にするには、className属性がorg.apache.coyote.http2.Http2Protocol
のUpgradeProtocol要素をConnectorにネストする必要があります。
<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サポート
SSLEnabled
属性をtrue
に設定することで、この**コネクタ**の特定のインスタンスに対してSSLサポートを有効にできます。
サーブレットに正しい情報を渡すために、scheme
属性とsecure
属性をそれぞれhttps
とtrue
に設定する必要もあります。
NIOおよびNIO2コネクタは、JSSE Java SSL実装またはOpenSSL実装のいずれかを使用します。可能な限り、JSSEとOpenSSLの両方で共通の構成属性が使用されます。
各セキュアコネクタは、少なくとも1つの**SSLHostConfig**を定義する必要があります。**SSLHostConfig**要素の名前は一意である必要があり、そのうちの1つは**コネクタ**の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の異なるバージョンでは、同じ暗号文字列を異なる方法で解釈することがあります。たとえば、 SSL実装によってサポートされている暗号のみが使用されます。デフォルト以外の暗号文字列から派生したリスト内の暗号で、SSL実装によってサポートされていないものは、コネクタの起動時に 指定しない場合、デフォルト(OpenSSL表記を使用)の デフォルトでは、暗号が定義されている順序は優先順位として扱われます。 |
disableCompression |
OpenSSLのみ。 圧縮を無効にするかどうかを構成します。デフォルトは |
disableSessionTickets |
OpenSSLのみ。
|
honorCipherOrder |
クライアントが暗号を選択することを許可する代わりに、サーバーの暗号順序( |
hostName |
SSLホストの名前。完全修飾ドメイン名(例: |
insecureRenegotiation |
OpenSSLのみ。 安全でない再ネゴシエーションを許可するかどうかを構成します。デフォルトは |
keyManagerAlgorithm |
JSSEのみ。 使用する |
protocols |
クライアントとの通信時にサポートするプロトコルの名前。次の組み合わせのリストにする必要があります。
リスト内の各トークンには、プラス記号("+")またはマイナス記号("-")を接頭辞として付けることができます。プラス記号はプロトコルを追加し、マイナス記号は現在のリストからプロトコルを削除します。リストは空のリストから構築されます。 トークン
OpenSSLベースのセキュアコネクタでは、
指定しない場合、デフォルト値の |
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サポート - 証明書
属性 | 説明 |
---|---|
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サポート - コネクタ - NIOおよびNIO2
APR/ネイティブが有効になっている場合、コネクタはJSSEを介してOpenSSLを使用するようにデフォルトで設定されます。これは、使用されているプロセッサによっては、JSSE Java実装よりも最適化されている可能性があり、多くの商用アクセラレータコンポーネントと組み合わせることができます。
次のNIOおよびNIO2 SSL構成属性は仮想ホストに固有のものではなく、そのため、コネクタで構成する必要があります。
属性 | 説明 |
---|---|
sniParseLimit |
SNIサポートを実装するために、Tomcatは新しいTLS接続で受信した最初のTLSメッセージ(クライアントヘロー)を解析して、要求されたサーバ名を抽出する必要があります。メッセージはバッファリングする必要があるため、通常のTLS処理のためにJSSE実装に渡すことができます。理論的には、この最初のメッセージは非常に大きくなる可能性がありますが、実際には通常は数百バイトです。この属性は、Tomcatがバッファリングする最大メッセージサイズを設定します。メッセージがこのサイズを超えると、クライアントによってサーバ名が示されていないかのように接続が構成されます。指定されていない場合、デフォルトは |
sslImplementationName |
使用するSSL実装のクラス名。指定されておらず、tomcat-nativeライブラリがインストールされていない場合、デフォルトは |
SSLサポート - OpenSSLのSSL_CONF API
OpenSSLがTLS実装を提供している場合、OpenSSLのSSL_CONF
APIを介してOpenSSLを構成するために、OpenSSLConf要素内に1つ以上のOpenSSLConfCmd要素をネストできます。単一のOpenSSLConf要素をSSLHostConfig要素にネストできます。
使用可能な構成ファイルコマンドのセットは、使用されているOpenSSLバージョンによって異なります。サポートされているコマンド名と値のリストについては、OpenSSLのSSL_CONF_cmd(3)マニュアルページの「サポートされている構成ファイルコマンド」セクションを参照してください。構成ファイルコマンドの一部は、SSLHostConfig属性の代替として使用できます。機能をSSLHostConfig属性を使用して構成できない場合にのみ、構成ファイルコマンドを使用することをお勧めします。
OpenSSLConf要素は属性をサポートしていません。
OpenSSLConfCmd要素は次の属性をサポートします。
属性 | 説明 |
---|---|
name |
構成ファイルコマンドの名前。 |
value |
構成ファイルコマンドに使用する値。 |
キーストアの種類
標準的なキーストアの種類(JKSおよびPKCS12)に加えて、ほとんどのJavaランタイムは、Windows-ROOT、Windows-My、DKSなどの追加のキーストアの種類とハードウェアセキュリティモジュールをサポートしています。一般的に、TomcatのTLSコネクタでこれらの追加のキーストアの種類を使用するには
- 必要に応じて、certificateKeystoreTypeおよび/またはtruststoreTypeコネクタ属性を設定します。
- 構成ファイルが必要な場合は、必要に応じて、certificateKeystoreFileおよび/またはtruststoreFileコネクタ属性をファイルが指すように設定します。
- 構成ファイルが必要ない場合は、ほぼ確実に、必要に応じて、certificateKeystoreFileおよび/またはtruststoreFileコネクタ属性を空の文字列("")に明示的に設定する必要があります。
- パスワードが必要な場合は、必要に応じて、certificateKeystorePasswordおよび/またはtruststorePasswordコネクタ属性に必要なパスワードを設定します。
- パスワードが必要ない場合は、ほぼ確実に、必要に応じて、certificateKeystorePasswordおよび/またはtruststorePasswordコネクタ属性を空の文字列("")に明示的に設定する必要があります。
キーストア実装のバリエーションと、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 |