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

これがtrueの場合、'\' 文字はパス区切り文字として許可されます。

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

allowTrace

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

asyncTimeout

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

discardFacades

コンテナ内部のリクエスト処理オブジェクトを分離するファサードオブジェクトのリサイクルを有効または無効にするために使用できるブール値です。trueに設定すると、ファサードはすべてのリクエスト後にガベージコレクション用に設定され、そうでなければ再利用されます。指定されていない場合、この属性はtrueに設定されます。

enableLookups

request.getRemoteHost() の呼び出しでリモートクライアントの実際のホスト名を返すために DNS ルックアップを実行させたい場合は、true に設定します。DNS ルックアップをスキップして代わりに IP アドレスを文字列形式で返したい場合は (これによりパフォーマンスが向上します)、false に設定します。デフォルトでは、DNS ルックアップは無効になっています。

encodedReverseSolidusHandling

reject に設定すると、%5c シーケンスを含むリクエストパスは 400 レスポンスで拒否されます。decode に設定すると、%5c シーケンスを含むリクエストパスは、他の %nn シーケンスがデコードされるのと同時に、そのシーケンスが \ にデコードされます。passthrough に設定すると、%5c シーケンスを含むリクエストパスは、%5c シーケンスが変更されないまま処理されます。

decoded に設定されている場合、allowBackslash 属性はデコード後に適用されます。

passthrough が使用される場合、後でアプリケーションによってパスが %nn デコードされる際に発生する可能性のある破損やデコード失敗を避けるため、必要なさらなる %nn デコードを実行するのはアプリケーションの責任です。リクエストパス内の %25 シーケンス(エンコードされた %)も、%25 シーケンスが変更されないまま処理されます。

指定されていない場合、デフォルト値は decode です。

encodedSolidusHandling

reject に設定すると、%2f シーケンスを含むリクエストパスは 400 レスポンスで拒否されます。decode に設定すると、%2f シーケンスを含むリクエストパスは、他の %nn シーケンスがデコードされるのと同時に、そのシーケンスが / にデコードされます。passthrough に設定すると、%2f シーケンスを含むリクエストパスは、%2f シーケンスが変更されないまま処理されます。

passthrough が使用される場合、後でアプリケーションによってパスが %nn デコードされる際に発生する可能性のある破損やデコード失敗を避けるため、必要なさらなる %nn デコードを実行するのはアプリケーションの責任です。リクエストパス内の %25 シーケンス(エンコードされた %)も、%25 シーケンスが変更されないまま処理されます。

指定されていない場合、デフォルト値は reject です。

enforceEncodingInGetWriter

これがtrueの場合、文字エンコーディングが指定されていない状態でResponse.getWriter()が呼び出されると、その後のResponse.getCharacterEncoding()呼び出しがISO-8859-1を返し、Content-Typeレスポンスヘッダーにcharset=ISO-8859-1コンポーネントが含まれるようになります。(SRV.15.2.22.1)

指定されていない場合、デフォルトの仕様準拠値であるtrueが使用されます。

maxCookieCount

リクエストで許可されるクッキーの最大数。0 未満の値は制限なしを意味します。指定されていない場合、デフォルト値の 200 が使用されます。

maxParameterCount

クエリ文字列から取得される、および POST リクエストの場合、コンテンツタイプが application/x-www-form-urlencoded または multipart/form-data であればリクエストボディから取得される、リクエストパラメータ(アップロードされたファイルを含む)の合計最大数です。この制限を超えるリクエストは拒否されます。0 未満の値は制限なしを意味します。指定されていない場合、デフォルトの 1000 が使用されます。

maxPartCount

コンテンツタイプが multipart/form-data のリクエストで許可されるパーツの合計最大数です。この制限は maxParameterCount に追加されます。この制限を超えるリクエストは拒否されます。0 未満の値は制限なしを意味します。指定されていない場合、デフォルトの 10 が使用されます。

maxPartHeaderSize

コンテンツタイプが multipart/form-data のリクエストで、各パーツに許可されるヘッダーバイトの最大数です。この制限を超えるリクエストは拒否されます。0 未満の値は制限なしを意味します。指定されていない場合、デフォルトの 512 が使用されます。

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

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

port

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

protocol

着信トラフィックを処理するプロトコルを設定します。デフォルト値は Java NIO ベースのコネクタを使用する HTTP/1.1 です。
明示的なプロトコルを使用するには、次の値を使用できます。
org.apache.coyote.http11.Http11NioProtocol - 非ブロッキング Java NIO コネクタ
org.apache.coyote.http11.Http11Nio2Protocol - 非ブロッキング Java NIO2 コネクタ
カスタム実装も使用できます。
弊社のコネクタ比較表をご覧ください。Java コネクタの設定は、HTTP と HTTPS で同じです。

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 アプライアンス、さらにはウェブサーバーなどの SSL アクセラレータからデータを受信する非 SSL コネクタで必要となるでしょう。デフォルト値は false です。

URIEncoding

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

useBodyEncodingForURI

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

注: 1) この設定はリクエストのクエリ文字列にのみ適用されます。URIEncoding とは異なり、リクエスト URI のパス部分には影響しません。2) リクエストの文字エンコーディングが不明な場合(ブラウザから提供されない、または SetCharacterEncodingFilter や同様のフィルタで Request.setCharacterEncoding メソッドを使用して設定されていない場合)、デフォルトエンコーディングは常に "ISO-8859-1" です。URIEncoding の設定は、このデフォルトには影響しません。

useIPVHosts

Tomcat がリクエストを受信した IP アドレスを使用して、リクエストを送信するホストを決定するようにするには、この属性を true に設定します。デフォルト値は false です。

xpoweredBy

この属性を true に設定すると、Tomcat は仕様で推奨されるヘッダーを使用してサーブレット仕様のサポートを宣伝します。デフォルト値は false です。

標準実装

標準 HTTP コネクタ(NIO および NIO2)はすべて、上記の共通コネクタ属性に加えて、以下の属性をサポートしています。

属性説明
acceptCount

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

acceptorThreadPriority

アクセプタースレッドの優先度です。新しい接続を受け入れるために使用されるスレッドです。デフォルト値は5java.lang.Thread.NORM_PRIORITY定数の値)です。この優先度の意味の詳細については、java.lang.ThreadクラスのJavaDocを参照してください。

address

複数の IP アドレスを持つサーバの場合、この属性は指定されたポートでリッスンするために使用されるアドレスを指定します。デフォルトでは、コネクタはすべてのローカルアドレスをリッスンします。JVM がシステムプロパティを使用して設定されていない限り、Java ベースのコネクタ (NIO, NIO2) は 0.0.0.0 または :: のいずれかで設定されている場合、IPv4 と IPv6 の両方のアドレスをリッスンします。

allowedTrailerHeaders

デフォルトでは、Tomcat はチャンク化された入力を処理する際にすべてのトレーラーヘッダーを無視します。ヘッダーを処理するには、このカンマ区切りのヘッダー名のリストに追加する必要があります。

bindOnInit

コネクタが使用するソケットがいつバインドされるかを制御します。trueに設定すると、コネクタが初期化されたときにバインドされ、コネクタが破棄されたときにアンバインドされます。falseに設定すると、ソケットはコネクタが起動されたときにバインドされ、停止されたときにアンバインドされます。指定されていない場合、デフォルトはtrueです。

clientCertProvider

クライアント証明書情報が java.security.cert.X509Certificate のインスタンス以外の形式で提供された場合、使用する前に変換する必要があり、このプロパティは変換を実行するためにどの JSSE プロバイダーが使用されるかを制御します。

compressibleMimeType

HTTP 圧縮が使用される可能性のある MIME タイプをカンマで区切ったリストです。デフォルト値は text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml です。タイプを明示的に指定すると、デフォルトは上書きされます。

compression

コネクタは、サーバの帯域幅を節約するために HTTP/1.1 GZIP 圧縮を使用する場合があります。パラメータに指定できる値は、「off」(圧縮を無効にする)、「on」(圧縮を許可し、テキストデータが圧縮される)、「force」(すべての場合に圧縮を強制する)、または数値の整数値(「on」と同等ですが、出力が圧縮される前の最小データ量を指定します)です。コンテンツ長が不明で圧縮が「on」またはより積極的な設定である場合、出力も圧縮されます。指定されていない場合、この属性は「off」に設定されます。

注意: 圧縮の使用(帯域幅の節約)と sendfile 機能の使用(CPU サイクルの節約)にはトレードオフがあります。コネクタが sendfile 機能をサポートしている場合(例: NIO コネクタ)、sendfile の使用は圧縮よりも優先されます。症状としては、48 KiB より大きい静的ファイルが圧縮されずに送信されます。コネクタの useSendfile 属性を以下に示すように設定するか、デフォルトの conf/web.xml または Web アプリケーションの web.xml 内のDefaultServletの設定で sendfile 使用しきい値を変更することで、sendfile をオフにできます。

compressionMinSize

compression が "on" に設定されている場合、この属性は出力が圧縮される前の最小データ量を指定するために使用できます。指定されていない場合、この属性はデフォルトで "2048" になります。単位はバイトです。

connectionLinger

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

connectionTimeout

このコネクタが、接続を受け入れた後、リクエスト URI 行が提示されるまで待機するミリ秒数です。タイムアウトしない(すなわち無限)場合は -1 を使用します。デフォルト値は 60000 (すなわち 60 秒) ですが、Tomcat に同梱されている標準の server.xml では 20000 (すなわち 20 秒) に設定されていることに注意してください。disableUploadTimeoutfalse に設定されていない限り、このタイムアウトはリクエストボディ (もしあれば) を読み込む際にも使用されます。

connectionUploadTimeout

データアップロード中に使用するタイムアウトをミリ秒単位で指定します。指定されていない場合、デフォルト値は 300000 (すなわち 300 秒) です。これはdisableUploadTimeoutfalseに設定されている場合にのみ有効になります。

continueResponseTiming

Expect: 100-continue ヘッダーを含むリクエストに対して 100 中間レスポンスコードをいつ返すか。以下の値が使用できます。

  • immediately - 中間 100 ステータスレスポンスは、可能な限りすぐに返されます。
  • onRead - 中間 100 ステータスレスポンスは、サーブレットがリクエストボディを読み取る場合にのみ返され、サーブレットがヘッダーを検査し、ユーザーエージェントが潜在的に大きなリクエストボディを送信する前に応答することを可能にします。

defaultSSLHostConfigName

セキュアな接続(このコネクタがセキュアな接続用に設定されている場合)で使用されるデフォルトのSSLHostConfigの名前です。クライアント接続が SNI を提供しない場合、または SNI が提供されるが設定されたSSLHostConfigのいずれとも一致しない場合に使用されます。指定されていない場合、デフォルト値の_default_が使用されます。提供される値は常に小文字に変換されます。

disableUploadTimeout

このフラグは、データのアップロード中にサーブレットコンテナが異なる、通常はより長い接続タイムアウトを使用することを可能にします。指定されていない場合、この属性はtrueに設定され、この長いタイムアウトを無効にします。

executor

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

executorTerminationTimeoutMillis

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

keepAliveTimeout

このコネクタが接続を閉じる前に、次の HTTP リクエストを待機するミリ秒数です。デフォルト値は、connectionTimeout 属性に設定された値を使用することです。タイムアウトしない(つまり無限)ことを示すには -1 の値を使用します。

maxConnections

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

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

maxExtensionSize

チャンク化された HTTP リクエストにおけるチャンク拡張の合計長を制限します。値が -1 の場合、制限は課されません。指定されていない場合、デフォルト値の 8192 が使用されます。

maxHeaderCount

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

maxHttpHeaderSize

maxHttpRequestHeaderSizemaxHttpResponseHeaderSize のデフォルト値を提供します。指定されていない場合、この属性は 8192 (8 KiB) に設定されます。

maxHttpRequestHeaderSize

HTTP リクエストに関連付けられたリクエスト行とヘッダーの最大許容サイズ(バイト単位)です。これは受信バイト数と比較されるため、行末記号、空白、リクエスト行、ヘッダー名、ヘッダー値も含まれます。指定されていない場合、この属性は maxHttpHeaderSize 属性の値に設定されます。

「Request header is too large」エラーが発生した場合は、この値を増やすことができますが、Tomcat がすべてのリクエストに対して指定した全量を割り当てることに注意してください。例えば、maxHttpRequestHeaderSize を 1 MB と指定し、アプリケーションが 100 の同時リクエストを処理する場合、リクエストヘッダーによって 100 MB のヒープが消費されます。

maxHttpResponseHeaderSize

HTTP レスポンスに関連付けられたレスポンスラインとヘッダーの最大許容サイズ(バイト単位)です。これは書き込まれたバイト数と比較されるため、行末記号、空白、ステータスライン、ヘッダー名、ヘッダー値も含まれます。指定されていない場合、この属性は maxHttpHeaderSize 属性の値に設定されます。

maxKeepAliveRequests

サーバーが接続を閉じるまでにパイプライン処理できる HTTP リクエストの最大数です。この属性を 1 に設定すると、HTTP/1.0 のキープアライブと、HTTP/1.1 のキープアライブおよびパイプライン処理が無効になります。これを -1 に設定すると、無制限のパイプライン処理またはキープアライブ HTTP リクエストが可能になります。指定されていない場合、この属性は 100 に設定されます。

maxQueueSize

(int) 実行を待機してキューに格納できる実行可能タスクの最大数。この数を超えると拒否されます。デフォルト値は Integer.MAX_VALUE です。

maxSwallowSize

中断されたアップロードのために Tomcat が飲み込むリクエストボディの最大バイト数(転送エンコーディングのオーバーヘッドを除く)です。中断されたアップロードとは、Tomcat がリクエストボディが無視されることを知っているにもかかわらず、クライアントがそれを送信し続ける場合を指します。Tomcat がボディを飲み込まない場合、クライアントはレスポンスを見ることができない可能性があります。指定されていない場合、デフォルトの 2097152 (2 MiB) が使用されます。0 未満の値は、制限が課されないことを示します。

maxThreads

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

maxTrailerSize

チャンク化された HTTP リクエストの最後のチャンクにおけるトレーラーヘッダーの合計長を制限します。これは正の整数値でなければなりません。指定されていない場合、デフォルト値の 8192 が使用されます。

minSpareThreads

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

noCompressionUserAgents

user-agent ヘッダーが、圧縮を使用すべきでない HTTP クライアントに一致する正規表現(java.util.regex を使用)です。これらのクライアントは、機能のサポートを宣伝しているにもかかわらず、実装に問題があるためです。デフォルト値は空の文字列(正規表現マッチングが無効)です。

processorCache

プロトコルハンドラは、パフォーマンスを高速化するためにプロセッサオブジェクトをキャッシュします。この設定は、これらのオブジェクトのキャッシュ数を決定します。-1 は無制限を意味し、デフォルトは 200 です。0 はリクエストプロセッサの再利用なしを意味します。これは、ワークロードに応じてパフォーマンスとガベージコレクションに非常に大きな影響を与えますが、すべてのリクエスト処理オブジェクトの再利用を避けることで追加のセキュリティ保証を提供します。Servlet 3.0 の非同期処理を使用しない場合、適切な値は maxThreads 設定と同じ値を使用することです。Servlet 3.0 の非同期処理を使用する場合、適切な値は maxThreads と予想される同時リクエスト(同期および非同期)の最大数のうち大きい方を使用することです。

relaxedPathChars

HTTP/1.1 仕様では、URI パスで使用される特定の文字は %nn でエンコードされる必要があります。残念ながら、主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcat がそのようなリクエストを拒否しないように、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は以下の文字の任意の組み合わせにできます: " < > [ \ ] ^ ` { | }。値に含まれる他の文字は無視されます。

relaxedQueryChars

HTTP/1.1 仕様では、URI クエリ文字列で使用される特定の文字は %nn でエンコードされる必要があります。残念ながら、主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcat がそのようなリクエストを拒否しないように、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は以下の文字の任意の組み合わせにできます: " < > [ \ ] ^ ` { | }。値に含まれる他の文字は無視されます。

restrictedUserAgents

user-agent ヘッダーが、クライアントがこれらの機能のサポートを宣伝している場合でも、HTTP/1.1 または HTTP/1.0 のキープアライブを使用すべきでない HTTP クライアントに一致する正規表現(java.util.regex を使用)です。デフォルト値は空の文字列(正規表現マッチングが無効)です。

server

HTTP レスポンスの Server ヘッダーを上書きします。設定されている場合、この属性の値は Web アプリケーションによって設定された Server ヘッダーをすべて上書きします。設定されていない場合、アプリケーションによって指定された値が使用されます。アプリケーションが値を指定しない場合、Server ヘッダーは設定されません。

serverRemoveAppProvidedValues

trueの場合、Webアプリケーションによって設定されたServerヘッダーはすべて削除されます。serverが設定されている場合、この属性は実質的に無視されることに注意してください。設定されていない場合、デフォルト値のfalseが使用されます。

SSLEnabled

この属性を使用して、コネクタでの SSL トラフィックを有効にします。コネクタでの SSL ハンドシェイク/暗号化/復号をオンにするには、この値を true に設定します。デフォルト値は false です。この値を true に設定すると、サーブレットに正しい request.getScheme() および request.isSecure() 値を渡すために、scheme および secure 属性も設定することをお勧めします。詳細については、SSL のサポートを参照してください。

tcpNoDelay

trueに設定すると、サーバーソケットにTCP_NO_DELAYオプションが設定され、ほとんどの状況でパフォーマンスが向上します。これはデフォルトでtrueに設定されています。

threadPriority

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

threadsMaxIdleTime

エグゼキュータにminSpareThreadsよりも多くのスレッドがある場合に、スレッドプールによってスレッドが生き残るミリ秒単位の時間です。指定されていない場合、デフォルトの60000ミリ秒が使用されます。このコネクタにエグゼキュータが関連付けられている場合、コネクタは内部スレッドプールではなくエグゼキュータを使用してタスクを実行するため、この属性は無視されます。エグゼキュータが設定されている場合、この属性に設定された値は正しく記録されますが、使用されていないことを明確にするために (JMX などを介して) -1 として報告されることに注意してください。

throwOnFailure

コネクタがライフサイクル遷移中に例外を経験した場合、その例外を再スローすべきか、それともログに記録すべきか?指定されていない場合、デフォルトのfalseが使用されます。デフォルトはorg.apache.catalina.startup.EXIT_ON_INIT_FAILUREシステムプロパティによって変更できることに注意してください。

useAsyncIO

(bool) 非同期 IO API の使用を有効または無効にするためにこの属性を使用します。デフォルト値は true です。

useKeepAliveResponseHeader

(bool) このインターネットドラフトに記載されている Keep-Alive HTTP レスポンスヘッダーの追加を有効または無効にするためにこの属性を使用します。デフォルト値は true です。

useVirtualThreads

(bool) 内部エグゼキュータでの仮想スレッドの使用を有効または無効にするためにこの属性を使用します。このコネクタにエグゼキュータが関連付けられている場合、この属性は無視されます。デフォルト値はfalseです。

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 以上であることは、これをtrueに設定することと同等です。標準属性connectionLingerの値が 0 未満であることは、これをfalseに設定することと同等です。この属性とsoLingerTimeの両方が設定されていない場合、両方に JVM のデフォルトが使用されます。

socket.soLingerTime

(int) ソケットの soLinger オプション (SO_LINGER) の秒数での値です。これは標準属性connectionLingerと同等です。この属性とsoLingerOnの両方が設定されていない場合、両方に JVM のデフォルトが使用されます。

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) ソケットのアンロックのタイムアウトです。コネクタが停止されると、自身にコネクタを開くことでアクセプタスレッドを解放しようとします。デフォルト値は250で、値はミリ秒単位です。この値は正でなければなりません。負またはゼロの値は無視されます。

NIO 固有の設定

以下の属性はNIOコネクタに固有です。

属性説明
pollerThreadPriority

(int) ポーラースレッドの優先度です。デフォルト値は5java.lang.Thread.NORM_PRIORITY定数の値)です。この優先度の意味の詳細については、java.lang.ThreadクラスのJavaDocを参照してください。

selectorTimeout

(int) ポーラーの select() タイムアウト時間(ミリ秒単位)です。この値は重要です。なぜなら、接続のクリーンアップが同じスレッドで行われるため、極端に高い値に設定しないでください。デフォルト値は 1000 ミリ秒です。

useSendfile

(bool) sendfile 機能を有効または無効にするためにこの属性を使用します。デフォルト値は true です。sendfile を使用すると、Tomcat がレスポンスに対して行う可能性のある圧縮が無効になることに注意してください。

socket.directBuffer

(bool) ダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。true の場合、バッファの割り当てには java.nio.ByteBuffer.allocateDirect() が使用され、false の場合、java.nio.ByteBuffer.allocate() が使用されます。デフォルト値は false です。
ダイレクトバッファを使用する場合は、ダイレクトメモリ空間に適切な量のメモリを割り当てるようにしてください。Sun の JDK の場合、-XX:MaxDirectMemorySize=256m のように設定します。

socket.directSslBuffer

(bool) SSL バッファにダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。true の場合、バッファの割り当てには java.nio.ByteBuffer.allocateDirect() が使用され、false の場合、java.nio.ByteBuffer.allocate() が使用されます。デフォルト値は false です。
ダイレクトバッファを使用する場合は、ダイレクトメモリ空間に適切な量のメモリを割り当てるようにしてください。Oracle の JDK の場合、-XX:MaxDirectMemorySize=256m のように設定します。

socket.appReadBufSize

(int) Tomcat で開かれる各接続は、読み取り ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファは 8192 バイトに設定されています。同時実行性が低い場合は、この値を増やしてより多くのデータをバッファリングできます。極端に多くのキープアライブ接続がある場合は、この値を減らすか、ヒープサイズを増やしてください。

socket.appWriteBufSize

(int) Tomcat で開かれる各接続は、書き込み ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファは 8192 バイトに設定されています。同時実行性が低い場合は、この値を増やしてより多くのレスポンスデータをバッファリングできます。極端に多くのキープアライブ接続がある場合は、この値を減らすか、ヒープサイズを増やしてください。
ここのデフォルト値はかなり低いので、数万の同時接続を扱わない場合は増やすべきです。

socket.bufferPool

(int) NIOx コネクタは、ソケットにリンクされた要素を保持する NioXChannel と呼ばれるクラスを使用します。ガベージコレクションを減らすために、NIOx コネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は -2 です。特殊な値として、-1 は無制限のキャッシュ、0 はキャッシュなし、-2 は bufferPoolSize 属性を使用して計算された値を意味します。

socket.bufferPoolSize

(int) NioXChannel プールは、オブジェクトベースではなく、サイズベースで設定することもできます。bufferPool が -2 ではない場合、この値は使用されません。
値はバイト単位ですが、特殊な値を除きます。特殊な値は、無制限のキャッシュの場合は -1、キャッシュなしの場合は 0、そして以下のように計算される値の場合は -2 です。
NioXChannel バッファサイズ = 読み取りバッファサイズ + 書き込みバッファサイズ
SecureNioXChannel バッファサイズ = アプリケーション読み取りバッファサイズ + アプリケーション書き込みバッファサイズ + 最大 SNI 解析サイズの2倍。ランタイムによって報告される最大メモリが 1GB を超える場合、プールサイズの値はメモリをバッファサイズで割った値になります。そうでない場合、0 になります。

socket.processorCache

(int) Tomcatはガベージコレクションを減らすためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは0です。特殊な値として、無制限キャッシュの場合は-1、キャッシュなしの場合は0です。

socket.eventCache

(int) Tomcatはガベージコレクションを減らすためにPollerEventオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは0です。特殊な値として、無制限キャッシュの場合は-1、キャッシュなしの場合は0です。

unixDomainSocketPath

サポートされている場合、このコネクタが作成し、着信接続を待機する Unix ドメインソケットへのパスです。これが指定されている場合、通常必須であるport属性は省略できます。詳細については、Unix ドメインソケットのサポートを参照してください。

unixDomainSocketPathPermissions

サポートされている場合、上記の unixDomainSocketPath で指定された Unix ドメインソケットに適用される POSIX 権限。権限は、(r)ead、(w)rite、e(x)ecute の3つのセットに分けられた9文字の文字列で指定され、それぞれ所有者、グループ、その他に対応します。権限が許可されない場合はハイフンが使用されます。指定されない場合、権限はデフォルトで rw-rw-rw- になります。

useInheritedChannel

(bool) このコネクタが inetd/systemd ネットワークソケットを継承するかどうかを定義します。1 つのコネクタのみがネットワークソケットを継承できます。このオプションは、systemd スーパーデーモンのポートへの接続要求が行われたときに Tomcat を自動的に起動するために使用できます。デフォルト値は false です。詳細については、java.nio.channels.spi.SelectorProvider クラスの JavaDoc を参照してください。

NIO2 固有の設定

以下の属性はNIO2コネクタに固有です。

属性説明
useSendfile

(bool) sendfile 機能を有効または無効にするためにこの属性を使用します。デフォルト値は true です。sendfile を使用すると、Tomcat がレスポンスに対して行う可能性のある圧縮が無効になることに注意してください。

socket.directBuffer

(bool) ダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。true の場合、バッファの割り当てには java.nio.ByteBuffer.allocateDirect() が使用され、false の場合、java.nio.ByteBuffer.allocate() が使用されます。デフォルト値は false です。
ダイレクトバッファを使用する場合は、ダイレクトメモリ空間に適切な量のメモリを割り当てるようにしてください。Sun の JDK の場合、-XX:MaxDirectMemorySize=256m のように設定します。

socket.directSslBuffer

(bool) SSL バッファにダイレクト ByteBuffer を使用するか、Java マップド ByteBuffer を使用するかのブール値です。true の場合、バッファの割り当てには java.nio.ByteBuffer.allocateDirect() が使用され、false の場合、java.nio.ByteBuffer.allocate() が使用されます。デフォルト値は false です。
ダイレクトバッファを使用する場合は、ダイレクトメモリ空間に適切な量のメモリを割り当てるようにしてください。Oracle の JDK の場合、-XX:MaxDirectMemorySize=256m のように設定します。

socket.appReadBufSize

(int) Tomcat で開かれる各接続は、読み取り ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファは 8192 バイトに設定されています。同時実行性が低い場合は、この値を増やしてより多くのデータをバッファリングできます。極端に多くのキープアライブ接続がある場合は、この値を減らすか、ヒープサイズを増やしてください。

socket.appWriteBufSize

(int) Tomcat で開かれる各接続は、書き込み ByteBuffer に関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファは 8192 バイトに設定されています。同時実行性が低い場合は、この値を増やしてより多くのレスポンスデータをバッファリングできます。極端に多くのキープアライブ接続がある場合は、この値を減らすか、ヒープサイズを増やしてください。
ここのデフォルト値はかなり低いので、数万の同時接続を扱わない場合は増やすべきです。

socket.bufferPool

(int) NIO2 コネクタは、ソケットにリンクされた要素を保持する Nio2Channel と呼ばれるクラスを使用します。ガベージコレクションを減らすために、NIO2 コネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は 500 で、キャッシュが 500 個の Nio2Channel オブジェクトを保持することを意味します。その他の値として、-1 は無制限のキャッシュ、0 はキャッシュなしを意味します。

socket.processorCache

(int) Tomcatはガベージコレクションを減らすためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは0です。その他の値として、無制限キャッシュの場合は-1、キャッシュなしの場合は0です。

ネストされたコンポーネント

Tomcat はサーバー名表示 (SNI) をサポートしています。これにより、複数の SSL 設定を単一のセキュアコネクタに関連付けることができ、特定の接続で使用される設定はクライアントが要求したホスト名によって決定されます。これを容易にするために、これらの設定の1つを定義するために使用できるSSLHostConfig要素が追加されました。任意の数のSSLHostConfigConnector内にネストできます。同時に、単一の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つはConnectordefaultSSLHostConfigName属性と一致する必要があります。

SSLHostConfigは、次に少なくとも1つのCertificateを定義する必要があります。Certificateのタイプは一意である必要があります。

サーブレット仕様のセクション 3.10 で定義されている標準の TLS 関連リクエスト属性に加えて、Tomcat は追加の TLS 関連属性を多数サポートしています。完全なリストはSSLSupport Javadocにあります。

詳細については、SSL 設定方法を参照してください。

SSL サポート - SSLHostConfig

属性説明
certificateRevocationListFile

証明書局の連結された証明書失効リストを含むファイルの名前です。形式は PEM エンコードです。定義されていない場合、クライアント証明書は証明書失効リストと照合されません (OpenSSL ベースのコネクタが使用され、certificateRevocationListPath が定義されている場合を除く)。相対パスは $CATALINA_BASE を基準に解決されます。JSSE ベースのコネクタは、この属性に URL を指定することもできます。

certificateRevocationListPath

OpenSSL のみ。

証明書認証局の証明書失効リストを含むディレクトリの名前です。形式は PEM エンコードです。相対パスは $CATALINA_BASE を基準に解決されます。

certificateVerification

接続を受け入れる前に、SSL スタックがクライアントから有効な証明書チェーンを要求するようにしたい場合は、required に設定します。SSL スタックがクライアント証明書を要求するが、提示されなくても失敗しないようにしたい場合は、optional に設定します。クライアント証明書をオプションとし、Tomcat が信頼された CA のリストと照合してチェックしないようにしたい場合は、optionalNoCA に設定します。TLS プロバイダーがこのオプションをサポートしない場合(OpenSSL はサポートしますが、JSSE はサポートしません)、optional が指定されたものとして扱われます。optionalNoCA が設定されている場合、OCSP も無効になります。none の値(デフォルト)は、クライアントが CLIENT-CERT 認証を使用するセキュリティ制約によって保護されたリソースを要求しない限り、証明書チェーンを要求しません。

certificateVerificationDepth

クライアント証明書を検証する際に許可される中間証明書の最大数です。指定されていない場合、デフォルト値の 10 が使用されます。

caCertificateFile

OpenSSL のみ。

信頼された認証局の連結された証明書を含むファイルの名前です。形式は PEM エンコードです。

caCertificatePath

OpenSSL のみ。

信頼された認証局の証明書を含むディレクトリの名前です。形式は PEM エンコードです。

ciphers

OpenSSL 構文を使用して有効にする暗号です。(サポートされている暗号のリストと構文については、OpenSSL ドキュメントを参照してください)。あるいは、標準の OpenSSL 暗号名または標準の JSSE 暗号名を使用したカンマ区切りの暗号リストを使用することもできます。

OpenSSL のバージョンが異なると、同じ暗号文字列でも解釈が異なる場合があります。例えば、OpenSSL 3.2 では CCM8 暗号が HIGH から MEDIUM に移動しました。使用されている OpenSSL または JSSE のバージョンに関わらず、Tomcat は提供された暗号値を最新の OpenSSL 開発ブランチと整合性のある方法で暗号リストに変換します。この暗号リストはその後、SSL 実装に渡されます。

SSL 実装でサポートされている暗号のみが使用されます。デフォルト以外の暗号文字列から派生したリストに含まれる暗号のうち、SSL 実装でサポートされていないものは、コネクタの起動時に WARNING メッセージとしてログに記録されます。この警告は、設定された SSL 実装でサポートされている暗号の明示的なリストを提供することで回避できます。

指定されていない場合、デフォルト (OpenSSL 記法を使用) の HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSA が使用されます。

デフォルトでは、暗号の定義順序が優先順序として扱われることに注意してください。honorCipherOrderを参照してください。

disableCompression

OpenSSL のみ。

圧縮を無効にするかどうかを設定します。デフォルトは true です。使用されている OpenSSL のバージョンが圧縮の無効化をサポートしていない場合、その OpenSSL バージョンのデフォルトが使用されます。

disableSessionTickets

OpenSSL のみ。

trueに設定すると、TLSセッションチケット(RFC 5077)の使用を無効にします。デフォルトはfalseです。TLSセッションチケットが使用されている場合、完全なピア証明書チェーンは最初の接続でのみ利用可能であり、後続の接続(チケットを使用してTLSセッションを確立する)ではピア証明書のみが利用可能で、完全なチェーンは利用できないことに注意してください。

honorCipherOrder

クライアントが暗号を選択することを許可する代わりに、サーバーの暗号順序(ciphers設定から)を強制するには、trueに設定します。デフォルトはfalseです。

hostName

SSL ホストの名前です。これは完全修飾ドメイン名(例: tomcat.apache.org)またはワイルドカードドメイン名(例: *.apache.org)であるべきです。指定されていない場合、デフォルト値の_default_が使用されます。提供される値は常に小文字に変換されます。

insecureRenegotiation

OpenSSL のみ。

安全でない再ネゴシエーションが許可されるかどうかを設定します。デフォルトはfalseです。使用されている OpenSSL のバージョンが安全でない再ネゴシエーションを許可するかどうかの設定をサポートしていない場合、その OpenSSL バージョンのデフォルトが使用されます。

keyManagerAlgorithm

JSSE のみ。

使用されるKeyManagerアルゴリズムです。これは、Sun JVM ではSunX509を返すKeyManagerFactory.getDefaultAlgorithm()にデフォルトで設定されます。IBM JVM はIbmX509を返します。他のベンダーについては、デフォルト値について JVM ドキュメントを参照してください。

protocols

クライアントと通信する際にサポートするプロトコルの名前です。これは、以下の任意の組み合わせのリストである必要があります。

  • SSLv2Hello
  • SSLv3
  • TLSv1
  • TLSv1.1
  • TLSv1.2
  • TLSv1.3
  • all

リスト内の各トークンは、プラス記号 ("+") またはマイナス記号 ("-") を接頭辞として付けることができます。プラス記号はプロトコルを追加し、マイナス記号は現在のリストから削除します。リストは空のリストから構築されます。

トークン allSSLv2Hello,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 のエイリアスです。

TLSv1.3 は、TLSv1.3 を実装する JVM を使用している場合にのみ JSSE でサポートされます。

SSLv2Hello は OpenSSL ベースのセキュアコネクタでは無視されることに注意してください。OpenSSL ベースのセキュアコネクタに複数のプロトコルが指定されている場合、常に SSLv2Hello をサポートします。単一のプロトコルが指定されている場合、SSLv2Hello はサポートされません。

SSLv2 および SSLv3 は本質的に安全ではないことに注意してください。

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

revocationEnabled

JSSE のみ。

JSSE プロバイダーは証明書失効チェックを有効にすべきですか?certificateRevocationListFileが設定されている場合、この属性は無視され、失効チェックは常に有効になります。この属性は、他の方法で現在の JSSE プロバイダーに設定された失効チェックを有効にすることを目的としています。指定されていない場合、デフォルトのfalseが使用されます。

sessionCacheSize

セッションキャッシュに保持する SSL セッションの数です。実装のデフォルトを使用するには -1 を指定します。ゼロ以上の値は実装に渡されます。ゼロは無制限のキャッシュサイズを指定するために使用されますが、推奨されません。指定されていない場合、デフォルトの -1 が使用されます。

sessionTimeout

SSL セッションが作成されてからタイムアウトするまでの時間(秒単位)。実装のデフォルトを使用するには -1 を指定します。ゼロ以上の値は実装に渡されます。ゼロは無制限のタイムアウトを指定するために使用されますが、推奨されません。指定されていない場合、デフォルトの 86400 (24 時間) が使用されます。

sslProtocol

JSSE のみ。

使用する SSL プロトコル(単一の値で複数のプロトコルが有効になる場合があります - 詳細については JVM ドキュメントを参照してください)。指定されていない場合、デフォルトは TLS です。許可される値は、SSLContext インスタンスを作成する際のアルゴリズムに許可される値について、JVM ドキュメントから取得できます。例えば、Oracle Java 11 を参照してください。注意: この属性と protocols には重複があります。

trustManagerClassName

JSSE のみ。

クライアント証明書を検証するために使用するカスタムのトラストマネージャクラスの名前です。このクラスは引数なしのコンストラクタを持ち、かつjavax.net.ssl.X509TrustManagerを実装している必要があります。この属性が設定されている場合、トラストストア属性は無視される場合があります。

truststoreAlgorithm

JSSE のみ。

トラストストアに使用するアルゴリズムです。指定されていない場合、javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()によって返されるデフォルト値が使用されます。

truststoreFile

JSSE のみ。

クライアント証明書を検証するために使用するトラストストアファイルです。デフォルトは javax.net.ssl.trustStore システムプロパティの値です。この属性もデフォルトのシステムプロパティも設定されていない場合、トラストストアは設定されません。相対パスは $CATALINA_BASE を基準に解決されます。この属性には URL も使用できます。

truststorePassword

JSSE のみ。

トラストストアにアクセスするためのパスワードです。デフォルトは javax.net.ssl.trustStorePassword システムプロパティの値です。そのプロパティが null の場合、トラストストアのパスワードは設定されません。無効なトラストストアパスワードが指定された場合、警告がログに記録され、パスワードなしでトラストストアにアクセスする試みが行われ、その場合トラストストアコンテンツの検証はスキップされます。

truststoreProvider

JSSE のみ。

サーバー証明書に使用されるトラストストアプロバイダーの名前です。デフォルトはjavax.net.ssl.trustStoreProviderシステムプロパティの値です。そのプロパティがnullで、このTLS仮想ホストに単一の証明書が設定されており、その証明書がPKCS12ではないkeystoreTypeを持っている場合、デフォルトはその単一証明書のkeystoreTypeになります。これらがいずれもデフォルトを特定しない場合、登録されたプロバイダーのリストが優先順に走査され、truststoreTypeをサポートする最初のプロバイダーが使用されます。

truststoreType

JSSE のみ。

トラストストアに使用されるキーストアのタイプです。デフォルトは javax.net.ssl.trustStoreType システムプロパティの値です。そのプロパティが null で、この TLS 仮想ホストに単一の証明書が設定されており、その証明書が PKCS12 ではない keystoreType を持っている場合、デフォルトはその単一の証明書の keystoreType になります。これらがいずれもデフォルトを特定しない場合、デフォルトは JKS になります。以下のキーストアの種類に関する注意書きを参照してください。

SSL サポート - Certificate

属性説明
certificateFile

サーバー証明書を含むファイルの名前です。形式は PEM エンコードです。相対パスは $CATALINA_BASE を基準に解決されます。

証明書に加えて、このファイルにはオプション要素として、openssl dhparamopenssl ecparam でそれぞれ生成された DH パラメータや一時キー用の EC カーブ名を含めることもできます。それぞれの OpenSSL コマンドの出力は、単に証明書ファイルに連結するだけで構いません。

この属性は、certificateKeystoreFileが指定されていない限り必須です。

certificateChainFile

使用されるサーバー証明書に関連付けられた証明書チェーンを含むファイルの名前です。形式は PEM エンコードです。相対パスは $CATALINA_BASE を基準に解決されます。

Tomcat で使用される証明書チェーンには、最初の要素としてサーバー証明書を含めるべきではありません。

異なるタイプに対して複数の証明書を使用する場合、それらはすべて同じ証明書チェーンを使用する必要があることに注意してください。

certificateKeyAlias

JSSE のみ。

キーストア内のサーバーキーと証明書に使用されるエイリアス。指定されていない場合、キーストアから読み込まれる最初のキーが使用されます。キーストアからキーが読み込まれる順序は実装依存です。キーが追加された順序と同じ順序でキーストアから読み込まれるとは限りません。キーストアに複数のキーが存在する場合、正しいキーが使用されるように `keyAlias` を設定することを強く推奨します。

certificateKeyFile

サーバーの秘密鍵を含むファイルの名前。形式はPEMエンコードです。デフォルト値は certificateFile の値であり、この場合、証明書と秘密鍵の両方がこのファイルに含まれている必要があります(非推奨)。相対パスは $CATALINA_BASE を基準に解決されます。

certificateKeyPassword

指定されたファイルから、サーバー証明書に関連付けられた秘密鍵にアクセスするために使用されるパスワード。

指定されていない場合、JSSE のデフォルトの動作では certificateKeystorePassword が使用されます。OpenSSL の場合、デフォルトの動作はパスワードを使用しないことですが、必要に応じてOpenSSLがパスワードの入力を求めます。

certificateKeyPasswordFile

指定されたファイルから、サーバー証明書に関連付けられた秘密鍵にアクセスするために使用されるパスワードファイル。この属性は certificateKeyPassword よりも優先されます。

指定されていない場合、JSSE のデフォルトの動作では certificateKeystorePasswordFile が使用されます。OpenSSL の場合、デフォルトの動作はパスワード(ファイル)を使用しないことですが、必要に応じてOpenSSLがパスワードの入力を求めます。

certificateKeystoreFile

JSSE のみ。

ロードするサーバー証明書とキーが格納されているキーストアファイルのパス名。デフォルトでは、Tomcatを実行しているユーザーのオペレーティングシステムのホームディレクトリにあるファイル .keystore がパス名となります。keystoreType がファイルを必要としない場合は、このパラメータに ""(空の文字列)または NONE を使用します。相対パスは $CATALINA_BASE を基準に解決されます。この属性にはURIも使用できます。ドメインキーストア(keystoreTypeDKS)を使用する場合、このパラメータはドメインキーストアへのURIである必要があります。

この属性は、certificateFile が指定されていない限り必須です。

certificateKeystorePassword

JSSE のみ。

サーバーの秘密鍵と証明書を含むキーストアにアクセスするために使用するパスワード。指定されていない場合、デフォルトの changeit が使用されます。

certificateKeystorePasswordFile

JSSE のみ。

サーバーの秘密鍵と証明書を含むキーストアにアクセスするために使用するパスワードファイル。この属性は certificateKeystorePassword よりも優先されます。

certificateKeystoreProvider

JSSE のみ。

サーバー証明書に使用されるキーストアプロバイダーの名前。指定されていない場合、システムプロパティ javax.net.ssl.keyStoreProvider の値が使用されます。この属性もシステムプロパティも設定されていない場合、登録されたプロバイダーのリストが優先順位で走査され、keystoreType をサポートする最初のプロバイダーが使用されます。

certificateKeystoreType

JSSE のみ。

サーバー証明書に使用されるキーストアファイルのタイプ。指定されていない場合、システムプロパティ javax.net.ssl.keyStoreType の値が使用されます。この属性もシステムプロパティも設定されていない場合、デフォルト値として「JKS」が使用されます。以下のキーストアタイプに関する注記を参照してください。

type

証明書のタイプ。これは、証明書と互換性のある暗号を識別するために使用されます。UNDEFINEDRSADSAEC のいずれかでなければなりません。SSLHostConfig 内に1つの Certificate のみがネストされている場合、この属性は必須ではなく、デフォルトで UNDEFINED になります。複数の CertificateSSLHostConfig 内にネストされている場合、この属性は必須であり、各 Certificate は一意のタイプを持つ必要があります。

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がバッファする最大メッセージサイズを設定します。メッセージがこのサイズを超えると、クライアントによってサーバー名が指定されなかったかのように接続が構成されます。指定されていない場合、デフォルトの 65536(64k)が使用されます。

sslImplementationName

使用するSSL実装のクラス名。指定されておらず、tomcat-nativeライブラリがインストールされていない場合、JVMのデフォルトJSSEプロバイダーをラップするデフォルトの org.apache.tomcat.util.net.jsse.JSSEImplementation が使用されます。JVMは、異なるJSSEプロバイダーをデフォルトとして使用するように構成できることに注意してください。Tomcatには、OpenSSLをバックエンドとするJSSE用の特別なSSL実装も同梱されています。これを有効にするには、ネイティブライブラリを有効にする必要があり、Tomcatは自動的にこれを有効にし、この属性のデフォルト値は org.apache.tomcat.util.net.openssl.OpenSSLImplementation になります。Java 22のFFM APIもOpenSSLサポートを有効にするために使用でき、その場合、この属性のデフォルト値は org.apache.tomcat.util.net.openssl.panama.OpenSSLImplementation になります。この場合、JSSEとOpenSSLの設定スタイルのどちらの属性も使用できますが、両方のタイプを混在させることはできません(例えば、Javaキーストアの使用を定義し、OpenSSL属性を使用して別のPEM秘密鍵を指定することは許可されません)。

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