Connectorタグは、以下の通信プロトコルをサポートしています。
Tomcatは、Servlet及びJSPを実行させるだけでなくスタンドアローンのWebサーバーとしても機能します。
※.但し、静的コンテンツを処理させるのはWebサーバーであるApacheHttpdServer,IIS,Nginxなどを利用すべきです。(筆者見解)
HTTP Connector要素は、Connectorコンポーネントを表します。
このコンポーネントの特定のインスタンスは、サーバー上にport属性で指定したTCPポート番号を解放します。
このようなコネクタは、1つのサービスの一部として構成することができます。
解放したTCPポート番号に対する要求(以下リクエスト)は、それぞれのコネクタがサービスに紐づけされたエンジンに転送して要求処理を実行し、応答(以下レスポンス)を作成します。
各着信要求は、そのリクエストの持続時間の間、スレッドを必要とします。
現在利用可能なリクエスト処理スレッドによって処理できるものよりも多くの同時要求が受信された場合、
追加のスレッドは構成された最大値(maxThreads属性の値)まで作成されます。
さらに多くの同時要求が受信された場合、それらはコネクターによって作成されたサーバーソケットの内部で構成された最大値(acceptCount属性の値)まで積み上げられます。
それ以上の同時リクエストは、リソースが処理できるようになるまで、「接続拒否」エラーを受け取ります。
スレッドプールの仕組みについては、「Javaプログラム - スレッド - Executors」のnewFixedThreadPoolの概要図をご覧ください。
同時接続数の多い大規模なサービスでは、ミドルウェアレベルでのチューニンングにおいて、
このConnectorタグ及びその属性の設定および調整がスループットに大きく関係する事が分かります。
また、1リクエスト毎に1スレッドが生成されている事からJVM上のヒープ領域(Javaのオプション引数 -Xmsと-Xmxで指定)のサイズが関係することが分かります。
(※.スレッドとヒープ領域の関係については、「Javaプログラム - スレッド - スレッド」のJVMで起きている事の概要図を参考にして下さい。)
本頁にある各属性の設定値のチューニングは、サーバー及びネットワークの物理構成と同時接続数、
データーベースのデータ量及び最大同時接続数に対するサーバーの運用実績(経験値)から調整するものが多いです。
または、多くの負荷試験からシュミレーションを行い導き出されるものです。
本書の読者がTomcatを上手くチューニングできるようになる事へのアドバイスとしては、
貴方がどのような立場でTomcatに接していても、本番機の機器構成(サーバー、ネットワーク)、
同時接続数(平均、最高)、データベースのデータ量、データベース側の最大同時接続などを
情報共有して頂き、どのような設定で運用しているか興味を持つ事です。
Connectorのすべての実装では、次の属性がサポートされています。
表記説明:必須可否欄 〇:必須 -:任意
属性 | 必須可否 | 未指定時の デフォルト値 |
初期設定値 | 説明 |
---|---|---|---|---|
allowTrace | - | false | 未指定 | TRACE HTTPメソッドを有効または無効にするために使用できるブール値。 |
asyncTimeout | - | 30000 | 未指定 | 非同期要求のデフォルトのタイムアウト(ミリ秒単位)。 デフォルト値は30秒。 |
defaultSSLHostConfigName | - | _default_ | 未指定 | クライアント接続がSNIを提供しない場合、またはSNIが提供されていても設定されたSSLHostConfigと一致しない場合、 セキュリティで保護された接続(このコネクタがセキュアな接続用に構成されている場合)に使用されるデフォルトのSSLHostConfigの名前。 指定されていない場合、_default_のデフォルト値が使用されます。 |
enableLookups | - | false | 未指定 | リモートクライアントの実際のホスト名を返すためにrequest.getRemoteHost()への呼び出しでDNSルックアップを実行する場合は、trueに設定します。 falseに設定すると、DNSルックアップをスキップし、代わりにString形式のIPアドレスを返します(これによりパフォーマンスが向上します)。 |
maxHeaderCount | - | 100 | 未指定 | コンテナによって許可されるリクエスト内のヘッダーフィールドの最大数。 指定された制限より多くのヘッダーを含むリクエストは拒否されます。 0より小さい値は無制限を意味します。 |
maxParameterCount | - | 10000 | 未指定 | コンテナによって解析されたGETとPOST合算のリクエストパラメータ(パラメータ名と値の組み合わせ)数の最大値。 この上限値を超えたパラメータは無視されます。 0より小さい値は、無制限を意味します。 org.apache.catalina.filters.FailedRequestFilterを使用して、上限に達したリクエストを拒否できます。 |
maxPostSize | - | 2097152(2MB) | 未指定 | コンテナのFORM URLパラメータの解析によって処理されたPOSTの最大サイズ(単位:バイト)。 0より小さい値は、無制限を意味します。 org.apache.catalina.filters.FailedRequestFilterを使用して、上限に達したリクエストを拒否できます。 |
maxSavePostSize | - | 4096(4KB) | 未指定 | FORMまたはCLIENT-CERT認証時にコンテナによって保存/バッファされるPOSTの最大サイズ(バイト単位)。 ・両方のタイプの認証では、POSTはユーザが認証される前に保存/バッファされます。 ・CLIENT-CERT認証の場合、POSTはSSLハンドシェイクの間バッファリングされ、 リクエストが処理されるとバッファは空になります。 ・FORM認証では、POSTは保存され、ユーザーはログインフォームにリダイレクトされます。 ユーザーが正常に認証されるか、認証要求に関連付けられたセッションが期限切れになるまで保持されます。 ・制限を無効にするには、この属性を-1に設定します。 ・属性をゼロに設定すると、認証時にPOSTデータの保存が無効になります。 |
parseBodyMethods | - | POST | 未指定 | リクエストボディがPOSTと同じようにリクエストパラメーター用に解析されるHTTPメソッドのコンマ区切りのリスト。 これは、PUT要求に対してPOSTスタイルのセマンティクスをサポートしたいRESTfulアプリケーションで便利です。 POST以外の設定では、Tomcatはサーブレット仕様の意図に反して動作することに注意してください。 HTTPメソッドTRACEは、HTTP仕様に従って特にここでは禁止されています。 |
port | 〇 | -1 | 8080 | このコネクタがサーバソケットを作成し、着信接続を待つTCPポート番号。 OSでは特定のIPアドレス上の特定のポート番号を1つのサーバーアプリケーションだけがリッスンできます。 特別な値0を使用すると、Tomcatは無作為に空きポートを選択してこのコネクタに使用します。 これは通常、組み込みアプリケーションおよびテストアプリケーションでのみ有効です。 ※.(筆者追記)下線部分の内容は、ソース上ではデフォルト値は-1であり、分岐条件は「0より大きい場合」に指定したポートを利用しています。 |
protocol | 〇 | Http11AprProtocol又はHttp11NioProtocol | HTTP/1.1 | 着信トラフィックを処理するようにプロトコルを設定します。 (筆者追記)この属性はコンテナへの接続処理を行うProtocolHandlerClassを指定するための属性です。 文字列「HTTP/1.1」,「未指定(null)」,「AJP/1.3」だけは自動で内部でProtocolHandlerClassNameを確定しています。 以下の何れかProtocolHandlerClassがConnectorとしてロードされます。 ・null値(未指定)の場合には、「HTTP/1.1」と同値。 ・「HTTP/1.1」かつAPR(Apache Portable Runtime)利用時・・org.apache.coyote.http11.Http11AprProtocol ・「HTTP/1.1」かつAPR未使用時・・org.apache.coyote.http11.Http11NioProtocol ・「AJP/1.3」かつAPR利用時・・org.apache.coyote.ajp.AjpAprProtocol ・「AJP/1.3」かつAPR未利用時・org.apache.coyote.ajp.AjpNioProtocol ・上記以外は、指定されたJavaの完全修飾子のクラス名をロードします。 PATH(Windows)またはLD_LIBRARY_PATH(ほとんどのUNIXシステムで)環境変数に Tomcatネイティブライブラリが含まれている場合、 APRを初期化するために使用されるAprLifecycleListenerにuseAprConnector属性がtrueに設定されている場合、 APR /ネイティブコネクタが使用されます。ネイティブライブラリが見つからないか、属性が設定されていない場合は、Java NIOベースのコネクタが使用されます。 APR /ネイティブコネクタには、Javaコネクタとは異なるHTTPS設定があります。 上記の自動切り替えメカニズムに依存するのではなく、明示的なプロトコルを使用するには、次の値を使用できます。 ・org.apache.coyote.http11.Http11NioProtocol - ノンブロッキングJavaNIOコネクター ・org.apache.coyote.http11.Http11Nio2Protocol - ノンブロッキングJavaNIO2コネクター ・org.apache.coyote.http11.Http11AprProtocol - APR/native コネクター. ※.ロードするクラスを指定できるのでカスタム実装も使用できます。 httpとhttpsの場合と同じJavaコネクターの構成をしています。 APRコネクタとAPR固有のSSL設定の詳細については、APRマニュアルを参照して下さい。 |
proxyName | - | null | 未指定 | このコネクターがプロキシー構成で使用されている場合は、この属性を構成して、 request.getServerName()への呼び出しで戻されるサーバー名を指定します。 詳細については、プロキシサポートを参照してください。 |
proxyPort | - | 0 | 未指定 | このコネクターがプロキシー構成で使用されている場合は、この属性を構成して、 request.getServerPort()への呼び出しで戻されるサーバー・ポートを指定します。 詳細については、プロキシサポートを参照してください。 |
redirectPort | - | 443 | 8443 | このコネクタが非SSL要求をサポートしていて、一致する<security-constraint>にSSL転送が必要な要求が受信された場合、 Catalinaはリクエストをここで指定されたポート番号に自動的にリダイレクトします。 |
scheme | - | http | 未指定 | この属性には、request.getScheme()の呼び出しによって返されるプロトコルの名前を設定します。 たとえば、SSLコネクタの場合、この属性を「https」に設定します。 |
secure | - | false | 未指定 | このコネクタで受信したリクエストに対してrequest.isSecure()がtrueを返すようにするには、この属性をtrueに設定します。 これは、暗号化カード、SSLアプライアンス、WebサーバーなどのSSLアクセラレータからデータを受信するSSLコネクタまたは非SSLコネクタで必要になります。 |
sendReasonPhrase | - | false | 未指定 | レスポンスに理由フレーズを使用する場合は、この属性をtrueに設定します。 注:このオプションは廃止され、Tomcat 9で削除されます。理由フレーズは送信されません。 |
URIEncoding | - | UTF-8 | 未指定 | %xxがURLをデコードした後、URIバイトのデコードに使用される文字エンコードを指定します。 指定されていない場合は、org.apache.catalina.STRICT_SERVLET_COMPLIANCEシステム・プロパティーが trueに設定されている場合は、「ISO-8859-1」が使用されそれ以外の場合には、「UTF-8」が使用されます。 |
useBodyEncodingForURI | - | false | 未指定 | URIEncodingを使用するのではなく、contentTypeで指定されたエンコーディングをURIクエリパラメータに使用するかどうかを指定します。 この設定は、contentTypeで指定されたエンコーディング、またはRequest.setCharacterEncodingメソッドを使用して 明示的に設定されたエンコーディングがURLのパラメータにも使用されるTomcat 4.1.xとの互換性のために存在します。 注:1)この設定は、要求のクエリ文字列にのみ適用されます。 URIEncodingとは異なり、要求URIのパス部分には影響しません。 2)要求文字エンコーディングがわからない場合 (ブラウザで提供されていない、SetCharacterEncodingFilterまたは Request.setCharacterEncodingメソッドを使用した同様のフィルターで設定されていない場合)、 デフォルトのエンコーディングは常に "ISO-8859-1"です。 URIEncoding設定はこのデフォルトに影響しません。 |
useIPVHosts | - | false | 未指定 | この属性をtrueに設定すると、Tomcatは要求を受け取ったIPアドレスを使用して要求を送信するホストを決定します。 |
xpoweredBy | - | false | 未指定 | この属性をtrueに設定すると、Tomcatは仕様で推奨されているヘッダーを使用してサーブレット仕様のサポートを宣伝します。 |
(筆者記)Connectorタグの設定により、スレッドプール機能を利用してリクエストが処理されることをExecutorタグでふれました。
本節では、Tomcatのチューニングに重要な属性が多く存在しますので、Tomcatサーバの管理者の方は是非その内容に関してご確認下さい。
標準のHTTPコネクタ(NIO、NIO2、APR /ネイティブ)は、上記の共通Connector属性に加えて、次の属性をすべてサポートしています。
表記説明:必須可否欄 〇:必須 -:任意
属性 | 必須可否 | 未指定時の デフォルト値 |
初期設定値 | 説明 |
---|---|---|---|---|
acceptCount | - | 100 | 未指定 | 可能なすべてのリクエスト処理スレッドが使用されているときに着信接続要求の最大キュー長。 キューが満杯になったときに受信された要求は拒否されます。 |
acceptorThreadCount | - | 1 | 未指定 | 接続を受け入れるために使用されるスレッドの数。 マルチCPUマシンではこの値を大きくしてください。 実際には2を超える値は必要ありません。 また、キープアライブのない接続が多い場合は、この値を大きくすることもできます。 |
acceptorThreadPriority | - | 5 | 未指定 | アクセプタスレッドの優先順位。新しい接続を受け入れるために使用されるスレッド。 デフォルト値は5(java.lang.Thread.NORM_PRIORITY定数の値)です。 この優先順位の意味の詳細については、JavaDocのjava.lang.Threadクラスを参照してください。 |
address | - | null | 未指定 | 複数のIPアドレスを持つサーバーの場合、この属性は指定されたポートでリッスンするために使用されるアドレスを指定します。 デフォルトでは、コネクターはすべてのローカル・アドレスをlistenします。 JVMがシステムプロパティーを使用して構成されていない限り、Javaベースのコネクター(NIO、NIO2)は、 0.0.0.0または::のいずれかで構成されている場合、IPv4およびIPv6アドレスの両方をlistenします。 APR /ネイティブコネクタは、0.0.0.0で構成されている場合にのみIPv4アドレスをリッスンし、 ::で構成されている場合はIPv6アドレス(およびオプションでipv6onlyv6の設定に応じてIPv4アドレス)でリッスンします。 (筆者記)複数のIPアドレスを保持させたサーバーにおいて全てのIPに対してTomcatサービスへの接続を受け付ける目的で無い場合には、 必要なアドレス分Connectorタグを同一属性で定義します。 |
allowHostHeaderMismatch | - | true | 未指定 | 要求ラインにホストを指定するHTTP / 1.1要求で、ホストヘッダーに同じホストを指定し、 そうでない要求を400応答で拒否する必要があることをRFC 7230の要件を実装します。 このチェックはオプションですが、デフォルトでは無効になっています。 これは、コネクタのallowHostHeaderMismatch属性で有効にすることができます。 (筆者記)2017/11/10時点でソースではtrueとフラグがデフォルト値で有効になっています。 |
allowedTrailerHeaders | - | 未設定 | 未指定 | デフォルトでは、チャンク入力を処理するとき、Tomcatはすべてのトレーラヘッダを無視します。 処理されるヘッダーは、ヘッダー名のコンマ区切りリストに追加する必要があります。 |
bindOnInit | - | true | 未指定 | コネクタで使用されるソケットがバインドされているときの制御を行います。 デフォルトでは、コネクターが開始されたときにバインドされ、 コネクターが破棄されたときにアンバインドされます。 falseに設定すると、コネクターは開始時にバインドされ、停止時にはアンバインドされます。 |
clientCertProvider | - | null | 未指定 | (String)クライアント証明書情報がjava.security.cert.X509Certificateのインスタンス以外の形式で提示される場合、 その証明書は使用する前に変換する必要があり、このプロパティは変換を実行するために使用されるJSSEプロバイダを制御します。 たとえば、AJPコネクタ、HTTP APRコネクタ、org.apache.catalina.valves.SSLValveで使用されます。 指定しない場合は、デフォルトのプロバイダが使用されます。 |
compressibleMimeType | - | text/html, text/xml, text/plain, text/css, text/javascript, application/javascript |
未指定 | 値は、HTTP圧縮が使用されるMIMEタイプのコンマ区切りリストです。 |
compression | - | off | 未指定 | コネクターは、サーバーの帯域幅を節約するために、HTTP / 1.1 GZIP圧縮を使用することがあります。 このパラメータの許容値は、 ・「off」(圧縮を無効にする) ・「on」(テキストデータを圧縮する圧縮を許可する) ・「force」(すべての場合に圧縮を強制する) ・または数値の整数値 ("on"と同じですが、出力が圧縮される前の最小データ量を指定します。) content-lengthがわからず、圧縮が "on"以上に設定されている場合、出力も圧縮されます。 指定されていない場合、この属性は "off"に設定されます。 注:圧縮(帯域幅の節約)とsendfile機能(CPUサイクルの節約)の使用には、トレードオフがあります。 コネクターがsendfile機能をサポートしている場(例: sendfileを使用するNIOコネクタは、 圧縮よりも優先されます。症状は、48 Kbを超える静的ファイルが圧縮されずに送信されることになります。 以下に示すように、コネクタのuseSendfile属性を設定することでsendfileを無効にするか、 既定のconf/web.xmlまたはWebアプリケーションのweb.xmlでDefaultServletの設定でsendfile使用率のしきい値を変更できます。) |
compressionMinSize | - | 2048(2KB) | 未指定 | compression属性が「on」に設定されている場合、この属性を使用して、出力が圧縮される前に最小限のデータ量を指定することができます。 指定する数値の単位は、バイトです。 |
connectionLinger | - | -1(無効) | 未指定 | このコネクタで使用されているソケットが閉じられたときに待機する秒数。 デフォルト値は-1で、socket lingerを無効にします。 |
connectionTimeout | - | 60000(60秒) | 20000(20秒) | Request-Line(要求行)が表示されるために、このコネクタが接続を受け入れた後に待機するミリ秒数。 無限のタイムアウトを示すには、-1の値を使用します。 disableUploadTimeoutがfalseに設定されていない限り、 このタイムアウトはリクエストボディ(存在する場合)を読み取るときにも使用されます。 (筆者記)HTTPプロトコルは、TCP/IPに準拠して、クライアント側からサーバ側への接続要求のためにTCP/IPプロトコルに従い、 論理的なネットワーク上の接続を確保します。その接続を確保した後に初めてHTTPメッセージをサーバーに送信します。 つまり、クライアント側との接続が確保されてからHTTPリクエストの開始行が受信されるまでの時間となります。 詳しくは、「Web-Web入門-静的コンテンツ(PC2台)」の「HTTPへの理解-アクセスが2回ある」をご覧ください。 |
connectionUploadTimeout | - | 300000(5分) | 未指定 | データアップロードの進行中に使用するタイムアウトをミリ秒単位で指定します。 これは、disableUploadTimeoutがfalseに設定されている場合にのみ有効です。 |
disableUploadTimeout | - | true | 未指定 | このフラグを使用すると、サーブレットコンテナは、データのアップロード中に通常は異なる接続タイムアウトを使用できます。 指定しない場合、この属性はtrueに設定され、このより長いタイムアウトを無効にします。 |
executor | - | null | 未指定 | リクエストを処理させるスレッドプールをExecutorで定義して利用する場合に、そのExecutorのname属性を指定します。 この属性が設定され、名前付きExecutorが存在する場合、コネクターはExecutorを使用し、他のすべてのスレッド属性は無視されます。 コネクターにExecutorが指定されていない場合、コネクターは専用の内部実行プログラムを使用して スレッド・プールを提供することに注意してください。 |
executor TerminationTimeoutMillis |
- | 5000(5秒) | 未指定 | 内部実行プログラムが、リクエスト処理スレッドが終了するのを待ってから、 コネクターを停止するプロセスを続行する時間。 |
keepAliveTimeout | - | 20000(20秒) | 未指定 | httpレスポンスを返してから次のリクエストをスレッド待機するミリ秒数。 無限(つまり無限)のタイムアウトを示すには、-1の値を使用します。 デフォルト値は、connectionTimeout属性の明示値である20秒が初期設定されています。 (筆者記)原文のニュアンスとソース、server.xmlの値から判断すると connectionTimeoutの属性値とkeepAliveTimeout属性値を揃えて欲しい事が読み取れます。 |
maxConnections | - | NIO・・10000 NIO2・・10000 APR/Native・・8192 |
未指定 | 任意の時点でサーバーが受け入れて処理する接続の最大数。 この数に達すると、サーバーは1つの接続を受け付けますが、処理しません。 この追加の接続は、処理される接続の数がmaxConnectionsを下回るまでブロックされ、 サーバーは新しい接続の受け入れと処理を再び開始します。 制限に達すると、OSは引き続きacceptCount設定に基づいて接続を受け付ける可能性があることに注意してください。 既定値はコネクタの種類によって異なります。 注)WindowsのAPR /ネイティブの場合、設定された値はmaxConnections以下の1024 の最高倍数に減少することに注意してください。これはパフォーマンスの理由から行われます。 値を-1に設定すると、maxConnections機能は無効になり、接続数はカウントされません。 |
maxCookieCount | - | 200 | 未指定 | リクエストに対して許可されるクッキーの最大数。 0より小さい値は無制限を意味します。 |
maxExtensionSize | - | 8192 | 未指定 | チャンクされたHTTPリクエスト内のチャンク拡張の合計長を制限します。 値が-1の場合、制限は課されません。 |
maxHttpHeaderSize | - | 8192(8KB) | 未指定 | リクエストとレスポンスのHTTPヘッダーの最大サイズ。バイト数で指定します。 |
maxKeepAliveRequests | - | 100 | 未指定 | 接続がサーバーによって閉じられるまで、パイプライン可能なHTTP要求の最大数。 この属性を1に設定すると、HTTP/1.0KeepAlive、HTTP/1.1KeepAlive、およびパイプライン処理が無効になります。 これを-1に設定すると、無制限にパイプラインまたはKeepAliveのHTTP要求が許可されます。 |
maxSwallowSize | - | 2097152(2MB) | 未指定 | Tomcatによって中断されたアップロードのために飲み込まれるリクエストボディの最大バイト数(転送エンコードオーバーヘッドを除く)。 中断されたアップロードは、要求本文が無視されるが、クライアントが依然としてそれを送信することをTomcatが知っているときです。 Tomcatがリクエストボディを飲み込まないと、クライアントはレスポンスを見にくいでしょう。 0より小さい値は、制限が強制されないことを示します |
maxThreads | - | 200 | 未指定 | このコネクタがリクエスト処理対して作成するスレツドの最大数(最大同時実行数)。 Executor属性を指定しないConnector属性はスレッドプールを構成します。 そのスレッドプールが処理待ちキューから実際にリクエスト処理をするスレッドの最大数です。 Executor属性を指定されている場合には、Executor側でスレッドプールを構成するため、Connector要素の本属性は無視されます。 |
maxTrailerSize | - | 8192 | 未指定 | チャンクされたHTTPリクエストの最後のチャンク内の末尾のヘッダーの合計バイト長を制限します。 値が-1の場合、制限は課されません。 |
minSpareThreads | - | 10 | 未指定 | スレッドプールで管理されるタスク待ちのスレッドの最小数。 Executor属性を指定されている場合には、Executor側でスレッドプールを構成するため、Connector要素の本属性は無視されます。 |
noCompressionUserAgents | - | null | 未指定 | 値は、圧縮を使用しないHTTPクライアントのユーザーエージェントヘッダーと一致する正規表現(java.util.regexを使用)です。 これらのクライアントは、機能のサポートを宣言していますが、実装が壊れているためです。 デフォルト値はregexpは無効です。 |
processorCache | - | 200 | 未指定 | プロトコルハンドラはパフォーマンスを向上させるためにProcessorオブジェクトをキャッシュします。 この設定によって、これらのオブジェクトのうちキャッシュされるオブジェクトの数が決まります。 -1は無制限を意味し、デフォルトは200です。 Servlet 3.0の非同期処理を使用しない場合は、maxThreads設定と同じものを使用することをお勧めします。 Servlet 3.0の非同期処理を使用する場合は、maxThreadsのうち大きい方と予想される同時要求数(同期および非同期)を使用することをお勧めします。 |
rejectIllegalHeaderName | - | false | 未指定 | 不正なヘッダー名(つまり、ヘッダー名がトークンではない)を含むHTTPリクエストが受信された場合、 この設定は、400の応答で拒否されるか(true)、不正なヘッダーが無視されるか(false)を決定します。 デフォルト値はfalseで、要求は処理されますが、不正なヘッダーは無視されます。 |
restrictedUserAgents | - | null | 未指定 | この値は、クライアントがこれらの機能のサポートをアドバタイズする場合でも、 HTTP/1.1またはHTTP/1.0が使用されるべきでないHTTPクライアントのユーザエージェントヘッダに一致する正規表現(java.util.regexを使用)です。 デフォルト値はregexpは無効です。 |
server | - | null | 未指定 | httpレスポンスヘッダーをオーバーライドします。 設定されている場合、この属性の値は、Webアプリケーションによって設定されたすべてのサーバーヘッダーを上書きします。 設定されていない場合は、アプリケーションによって指定された値が使用されます。 アプリケーションが値を指定しない場合、サーバーヘッダーは設定されません。 |
serverRemove AppProvidedValues |
- | false | 未指定 | trueの場合、Webアプリケーションによって設定されたサーバーヘッダーはすべて削除されます。 server属性が設定されている場合、この属性は無視されます。 |
SSLEnabled | - | false | 未指定 | この属性を使用して、コネクターのSSLトラフィックを使用可能にします。 コネクターでSSLハンドシェイク/暗号化/復号化をオンにするには、この値をtrueに設定します。 この値をtrueにすると、適切なrequest.getScheme()およびrequest.isSecure()値を サーブレットに渡すために、scheme属性とsecure属性を設定することも必要です。 |
tcpNoDelay | - | true | 未指定 | trueに設定すると、TCP_NO_DELAYオプションがサーバーソケットに設定され、 ほとんどの状況でパフォーマンスが向上します。 |
threadPriority | - | 5 | 未指定 | JVM内の要求処理スレッドの優先順位。 デフォルト値は、5(Thread.NORM_PRIORITY)です。 優先順位の意味の詳細については、JavaDocのjava.lang.Threadクラスを参照してください。 Executor属性を指定されている場合には、Executor側でスレッドプールを構成するため、Connector要素の本属性は無視されます。 |
各プロトコルにおける特記事項を以下に記します。
このコネクタは、永続的な接続、パイプライン処理、期待値、チャンクエンコーディングなど、RFC 7230-7235に記述されている
HTTP/1.1プロトコルのすべての必須機能をサポートしています。
クライアントがHTTP/1.0またはHTTP/0.9のみをサポートしている場合、
Connectorはこのプロトコルをサポートするように正常にフォールバックします。
このサポートを有効にするための特別な構成は必要ありません。
Connectorは、HTTP/1.0キープアライブもサポートしています。
RFC 7230では、HTTPサーバーは、サポートすると主張する最も高いHTTPバージョンで常に応答を開始する必要があります。
したがって、このコネクタは応答の最初に常にHTTP/1.1を返します。
TLS(h2)、HTTPアップグレード(h2c)経由の非TLS、およびHTTP/2(h2c)接続のHTTP/2サポートが提供されています。
HTTPコネクタのHTTP/2サポートを有効にするには、
次のUpgradeProtocol要素をorg.apache.coyote.http2.Http2ProtocolのclassName属性を使用してConnector内にネストする必要があります。
<Connector ... >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /<
</Connector ... >
Java 8のTLS実装はALPN(TLSでHTTP/2に必要)をサポートしていないため、
OpenSSLベースのTLS実装を使用してHTTP/2サポートを有効にする必要があります。
コネクターのsslImplementationName属性を参照してください。
proxyNameおよびproxyPort属性は、Tomcatがプロキシサーバーの背後で実行されているときに使用できます。
これらの属性は、リダイレクトの絶対URLを構築するためによく使われるrequest.getServerName()メソッドとrequest.getServerPort()メソッドを
呼び出すWebアプリケーションに返される値を変更します。これらの属性を設定しないと、クライアントが元の要求を指示したサーバー名とポートではなく、
プロキシサーバーからの接続が受信されたサーバー名とポートが返されます。
詳しくは、ProxyHowTo本家サイトをご覧ください。
標準実装の多くは、Executorタグ未定義時にConnectorタグがスレッドプールを構成しているという点が大きな要点となります。
そして、HTTP/1.1に準拠した機能の各サイズの調整値を指定できます。
初めてTomcatを学習されるプログラマ、エンジニアの方は、まずはデフォルトのserver.xmlの属性を理解することから初めて下さい。
開発チームリーダー、共通チーム、インフラチーム、運用チームの方々は、日々の運用実績(同時アクセス数[平均、最高]、CPU使用率などの監視項目)を鑑みて、
筆者が太字で強調した属性を再度ご確認いただけたら幸いです。
全ての属性が論理的に計算で導き出される値ではなく、経験則に基づいた概算でしかありません。
値の調整はできるだけ商用環境と同一の環境化で負荷試験を行い、シュミレーションを多く実行することで調整することが現実的です。
また、社内で多くのサーバーを管理している企業において重要なのは、管理しているTomcatサーバの過去、現在の運用実績と設定値を
部署間、システム間隔て無く、情報共有できる範囲でノウハウを共有し、更に向上させていく事です。