Valve コンポーネント
目次
はじめに
Valve 要素は、関連付けられた Catalina コンテナ(Engine、Host、Context)のリクエスト処理パイプラインに挿入されるコンポーネントを表します。個々の Valve は異なる処理能力を持ち、以下に個別に説明します。
以下の説明では、$CATALINA_BASE 変数名を使用して、ほとんどの相対パスが解決されるベースディレクトリを参照します。CATALINA_BASE ディレクトリを設定して Tomcat を複数インスタンスで構成していない場合、$CATALINA_BASE は Tomcat をインストールしたディレクトリである $CATALINA_HOME の値に設定されます。
アクセスログ
アクセスログは、org.apache.catalina.AccessLog インターフェースを実装する Valve によって実行されます。
アクセスログValve
はじめに
Access Log Valve は、標準の Web サーバーによって作成されるログファイルと同じ形式でログファイルを作成します。これらのログは、後で標準のログ分析ツールによって解析され、ページヒット数、ユーザーセッションアクティビティなどを追跡できます。このValve
は、ログファイルを書き込むための自己完結型のロジックを使用し、毎日深夜に自動的にログファイルをロールオーバーできます。(アクセスログの基本的な要件は、大量の連続的なデータを低オーバーヘッドで処理することです。このValve
は Apache Commons Logging を使用しないため、追加のオーバーヘッドと潜在的に複雑な設定を回避します)。
このValve
は、任意の Catalina コンテナ(Context
、Host
、またはEngine
)に関連付けることができ、そのコンテナによって処理されるすべてのリクエストを記録します。
一部のリクエストは、コンテナに渡される前に Tomcat によって処理される場合があります。これには、/foo から /foo/ へのリダイレクトや、無効なリクエストの拒否が含まれます。Tomcat がリクエストを処理するはずだったContext
を識別できる場合、リクエスト/レスポンスは関連付けられたContext
、Host
、Engine
のAccessLog
に記録されます。Tomcat がリクエストを処理するはずだったContext
を識別できない場合(例:URL が無効な場合)、Tomcat はまずEngine
、次にEngine
のデフォルトHost
、そして最後にデフォルトHost
の ROOT(またはデフォルト)Context
でAccessLog
実装を探します。Tomcat は、コンテナに渡される前に拒否されたリクエストをログに記録するために、最初に見つかったAccessLog
実装を使用します。
出力ファイルは、directory
属性で指定されたディレクトリに配置されます。ファイル名は、設定されたprefix
、タイムスタンプ、およびsuffix
を連結して構成されます。ファイル名内のタイムスタンプの形式は、fileDateFormat
属性を使用して設定できます。rotatable
をfalse
に設定してファイルローテーションをオフにした場合、このタイムスタンプは省略されます。
警告: 複数の AccessLogValve インスタンスを使用する場合は、異なる出力ファイルを使用するように設定する必要があります。
sendfile が使用される場合、応答バイトは別のスレッドで非同期に書き込まれ、アクセスログバルブは実際に書き込まれたバイト数を認識しません。この場合、書き込みのために sendfile スレッドに渡されたバイト数がアクセスログバルブに記録されます。
属性
Access Log Valve は以下の設定属性をサポートしています
属性 | 説明 |
---|---|
buffered |
ロギングがバッファリングされるかどうかを決定するフラグ。 |
className |
使用する実装の Java クラス名。デフォルトのアクセスログバルブを使用するには、これをorg.apache.catalina.valves.AccessLogValveに設定する必要があります。 |
condition |
|
conditionIf |
条件付きロギングを有効にします。設定されている場合、リクエストは |
conditionUnless |
条件付きロギングを有効にします。設定されている場合、リクエストは |
directory |
このバルブによって作成されたログファイルが配置されるディレクトリの絶対パスまたは相対パス名。相対パスが指定されている場合、$CATALINA_BASEからの相対パスとして解釈されます。directory 属性が指定されていない場合、デフォルト値は "logs" ($CATALINA_BASEからの相対パス) です。 |
encoding |
ログファイルの書き込みに使用される文字セット。空の文字列はデフォルトの文字セットを使用することを意味します。デフォルト値: UTF-8。 |
fileDateFormat |
アクセスログファイル名にカスタムタイムスタンプを許可します。フォーマットされたタイムスタンプが変更されるたびにファイルがローテーションされます。デフォルト値は |
ipv6Canonical |
IPv6アドレスを RFC 5952 で定義されている正規表現形式で表すかどうかを決定するフラグ。 |
locale |
アクセスログ行のタイムスタンプのフォーマットに使用されるロケール。明示的な SimpleDateFormat パターン( |
maxDays |
ローテーションされたアクセスログが削除されるまでに保持される最大日数。指定されていない場合、古いファイルを削除しないことを意味するデフォルト値 |
maxLogMessageBufferSize |
ログメッセージバッファは通常、再利用されます。過剰なメモリ使用量を防ぐため、バッファがこのサイズを超えて大きくなった場合は破棄されます。デフォルトは |
pattern |
リクエストとレスポンスからログに記録されるさまざまな情報フィールドを識別するフォーマットレイアウト、または標準形式を選択するための |
prefix |
各ログファイル名の先頭に追加されるプレフィックス。指定されていない場合、デフォルト値は "access_log" です。 |
renameOnRotate |
デフォルトでは、ローテーション可能なログの場合、アクティブなアクセスログファイル名には |
requestAttributesEnabled |
リクエスト属性(通常、RemoteIpValve などによって設定される)が存在するかどうかを確認するために |
resolveHosts |
この属性はサポートされなくなりました。代わりにコネクタ属性 コネクタの |
rotatable |
ログローテーションを行うかどうかを決定するフラグ。 |
suffix |
各ログファイル名の末尾に追加されるサフィックス。指定されていない場合、デフォルト値は "" (ゼロ長の文字列) で、サフィックスが追加されないことを意味します。 |
pattern
属性の値は、リテラルテキスト文字列と、現在のリクエストとレスポンスからの対応する変数値による置換を引き起こすために "%" 文字をプレフィックスとするパターン識別子を組み合わせて構成されます。以下のパターンコードがサポートされています
%a
- リモート IP アドレス。以下の%{xxx}a
も参照してください。%A
- ローカル IP アドレス%b
- 送信バイト数(HTTP ヘッダーを除く)、ゼロの場合は '-'%B
- 送信バイト数(HTTP ヘッダーを除く)%D
- リクエストの処理にかかった時間(マイクロ秒)%F
- レスポンスのコミットにかかった時間(ミリ秒)%h
- リモートホスト名(コネクタのenableLookups
が false の場合は IP アドレス)%H
- リクエストプロトコル%I
- 現在のリクエストスレッド名(後でスタックトレースと比較可能)%l
- identd からのリモート論理ユーザー名(常に '-' を返す)%m
- リクエストメソッド(GET、POST など)%p
- このリクエストが受信されたローカルポート。以下の%{xxx}p
も参照してください。%q
- クエリ文字列(存在する場合は '?' が前置される)%r
- リクエストの最初の行(メソッドとリクエスト URI)%s
- レスポンスの HTTP ステータスコード%S
- ユーザーセッション ID%t
- 日付と時刻(Common Log Format)%T
- リクエストの処理にかかった時間(秒)%u
- 認証されたリモートユーザー(存在する場合)、それ以外の場合は '-' (必要に応じてエスケープされる)%U
- リクエストされた URL パス%v
- ローカルサーバー名%X
- レスポンス完了時の接続ステータスX
= レスポンス完了前に接続が中断された。+
= レスポンス送信後も接続が維持される可能性がある。-
= レスポンス送信後に接続が閉じられる。
また、着信または発信ヘッダー、クッキー、セッション、またはリクエスト属性、および特殊なタイムスタンプ形式の情報を書き込むこともサポートされています。これは、Apache HTTP Server のログ構成構文をモデルにしています。それぞれを異なるxxx
キーで複数回使用できます。
%{xxx}a
リモートアドレス(クライアント)を書き込む(xxx==remote
)か、接続ピアアドレスを書き込む(xxx=peer
)%{xxx}i
名前がxxx
の受信ヘッダーの値を書き込む(必要に応じてエスケープされる)%{xxx}o
名前がxxx
の送信ヘッダーの値を書き込む(必要に応じてエスケープされる)%{xxx}c
名前がxxx
のクッキーの値を書き込む(カンマ区切りで、必要に応じてエスケープされる)%{xxx}r
名前がxxx
の ServletRequest 属性の値を書き込む(必要に応じてエスケープされる、リクエストが null の場合は??
)%{xxx}s
名前がxxx
の HttpSession 属性の値を書き込む(必要に応じてエスケープされる、リクエストが null の場合は??
)%{xxx}p
ローカル(サーバー)ポートを書き込む(xxx==local
)か、リモート(クライアント)ポートを書き込む(xxx=remote
)%{xxx}t
拡張された SimpleDateFormat パターンxxx
を使用してフォーマットされた、リクエストの終了時のタイムスタンプを書き込む%{xxx}L
リクエストに関連付けられた識別子を書き込む。xxx
の唯一の有効な値は接続を表すc
です。%{xxx}T
リクエストの処理にかかった時間を単位xxx
で書き込む。有効な単位はナノ秒の場合はns
、マイクロ秒の場合はus
、ミリ秒の場合はms
、秒の端数の場合はfracsec
、または秒全体の場合はs
です。%{s}T
は%T
と同等であり、%{us}T
は%D
と同等です。
SimpleDateFormat でサポートされているすべての形式は、%{xxx}t
で許可されます。さらに、以下の拡張が追加されました
sec
- エポックからの秒数msec
- エポックからのミリ秒数msec_frac
- ミリ秒の端数
これらの形式は、同じフォーマットトークン内で SimpleDateFormat 形式と混在させることはできません。
さらに、リクエスト開始時刻またはレスポンス終了時刻のタイムスタンプをログに記録するかどうかを定義できます
begin
またはプレフィックスbegin:
はリクエスト開始時間を選択しますend
またはプレフィックスend:
はレスポンス終了時間を選択します
パターンに複数の%{xxx}t
トークンを追加することで、両方のタイムスタンプをログに記録することもできます。
エスケープは次のように適用されます
"
は\"
としてエスケープされます\
は\\
としてエスケープされます\f
、\n
、\r
、\t
には標準 C エスケープが使用されます- その他の制御文字またはコードポイントが 127 を超える文字は、標準の Java ユニコードエスケープ(
\uXXXX
)を使用してエンコードされます
省略形のパターンpattern="common"
は、'%h %l %u %t "%r" %s %b'で定義された共通ログフォーマットに対応します。
省略形のパターンpattern="combined"
は、Referer
とUser-Agent
ヘッダーの値を、それぞれ二重引用符で囲んでcommon
パターンに追加します。
未知のパターン識別子を使用するフィールドは???X???
としてログに記録され、X
は未知の識別子です。未知のパターン識別子と{xxx}
キーを持つフィールドは???
としてログに記録されます。
Tomcat がリバースプロキシの背後で動作している場合、Access Log Valve によってログに記録されるクライアント情報は、Tomcat とリバースプロキシの設定に応じて、リバースプロキシ、ブラウザ、またはその両方の組み合わせを表す場合があります。Tomcat の設定オプションについては、プロキシのサポートとプロキシハウツーを参照してください。mod_jk を使用するリバースプロキシについては、汎用プロキシのドキュメントを参照してください。その他のリバースプロキシについては、それらのドキュメントを参照してください。
拡張アクセスログValve
はじめに
Extended Access Log Valve はAccess Log Valveクラスを拡張しているため、同じ自己完結型ロギングロジックを使用します。これは、多くの同じファイル処理属性を実装していることを意味します。標準のAccessLogValve
との主な違いは、ExtendedAccessLogValve
が W3C によって定義された拡張ログファイル形式のワーキングドラフトに準拠するログファイルを作成することです。
属性
Extended Access Log Valve は、標準のAccess Log Valveのすべての設定属性をサポートしています。異なるのは、className
とpattern
に使用される値のみです。
属性 | 説明 |
---|---|
className |
使用する実装の Java クラス名。拡張アクセスログバルブを使用するには、これをorg.apache.catalina.valves.ExtendedAccessLogValveに設定する必要があります。 |
pattern |
リクエストとレスポンスからログに記録されるさまざまな情報フィールドを識別するフォーマットレイアウト。この属性の設定に関する詳細については、以下を参照してください。 |
pattern
属性の値はフォーマットトークンで構成されます。一部のトークンには追加のプレフィックスが必要です。可能なプレフィックスは「クライアント」のc
、「サーバー」のs
、「クライアントからサーバーへ」のcs
、「サーバーからクライアントへ」のsc
、または「アプリケーション固有」のx
です。さらに、一部のトークンは追加のセレクターによって完了します。フォーマットに関する詳細については、W3C 仕様を参照してください。
以下のフォーマットトークンがサポートされています
- bytes - 送信バイト数(HTTP ヘッダーを除く)、ゼロの場合は '-'
- c-dns - リモートホスト名(コネクタの
enableLookups
が false の場合は IP アドレス) - c-ip - リモート IP アドレス
- cs-method - リクエストメソッド(GET、POST など)
- cs-uri - リクエスト URI
- cs-uri-query - クエリ文字列(存在する場合は '?' が前置される)
- cs-uri-stem - リクエストされた URL パス
- date - GMT の yyyy-mm-dd 形式の日付
- s-dns - ローカルホスト名
- s-ip - ローカル IP アドレス
- sc-status - レスポンスの HTTP ステータスコード
- time - リクエストが処理された時刻(GMT の HH:mm:ss 形式)
- time-taken - リクエストの処理にかかった時間(秒)。ナノ秒の場合は
-ns
、マイクロ秒の場合は-us
、ミリ秒の場合は-ms
、秒の端数の場合は-fracsec
のサフィックスも使用できます。 - x-threadname - 現在のリクエストスレッド名(後でスタックトレースと比較可能)
x-H(XXX)
のいずれについても、HttpServletRequest オブジェクトから以下のメソッドが呼び出されます
x-H(authType)
: getAuthTypex-H(characterEncoding)
: getCharacterEncodingx-H(connectionId)
: getServletConnection().getConnectionIdx-H(contentLength)
: getContentLengthx-H(locale)
: getLocalex-H(protocol)
: getProtocolx-H(remoteUser)
: getRemoteUserx-H(requestedSessionId)
: getRequestedSessionIdx-H(requestedSessionIdFromCookie)
: isRequestedSessionIdFromCookiex-H(requestedSessionIdValid)
: isRequestedSessionIdValidx-H(scheme)
: getSchemex-H(secure)
: isSecure
ヘッダー、クッキー、コンテキスト、リクエストまたはセッション属性、およびリクエストパラメーターに関する情報を書き込む機能もサポートされています。
cs(XXX)
XXX という名前の受信リクエストヘッダー用sc(XXX)
XXX という名前の送信レスポンスヘッダー用x-A(XXX)
XXX という名前のサーブレットコンテキスト属性用x-C(XXX)
XXX という名前のクッキー用(必要に応じてカンマ区切り)x-O(XXX)
XXX という名前のすべての送信レスポンスヘッダーの連結用x-P(XXX)
XXX という名前の URL エンコードされた(UTF-8 を使用した)リクエストパラメーター用x-R(XXX)
XXX という名前のリクエスト属性用x-S(XXX)
XXX という名前のセッション属性用
JSON アクセスログValve
はじめに
属性
JSONアクセスログバルブは、標準のアクセスログバルブのすべての設定属性をサポートしています。className
に使用される値のみが異なります。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。拡張アクセスログバルブを使用するには、org.apache.catalina.valves.JsonAccessLogValveに設定する必要があります。 |
サポートされるパターンは通常のアクセスログバルブと同じですが、いくつかの違いがあります。
- リクエストはJSONオブジェクトとしてログに記録されます。
- サポートされている各「%X」単一文字パターン識別子は、このオブジェクト内でキーと値のペアになります。対応するパターン識別子に使用されるキーのリストは以下を参照してください。
- "X"が"a"、"p"、"t"のいずれかである形式
%{xxx}X
のサブキーを使用する各パターン識別子は、「key-xxx」という形式のキーと値のペアになります。対応するパターン識別子に使用されるキーのリストは以下を参照してください。 - "X"が"c"、"i"、"o"、"r"、"s"のいずれかである形式
%{xxx}X
のサブキーを使用する各パターン識別子は、サブオブジェクトになります。このサブオブジェクトを指すキーは以下を参照してください。サブオブジェクト内のキーは、パターン内の「xxx」サブキーです。 - サポートされていない各「%X」文字パターン識別子は、「other-X」というキーを使用してキーと値のペアになります。
- ログに記録される値は、同じパターン識別子に対して標準のアクセスログバルブによってログに記録される値と同じです。
- 任意の「xxx」サブキーはJSONエスケープされます。
- パターン識別子の間の任意の逐語的なテキストは、黙って無視されます。
%a
: remoteAddr%A
: localAddr%b
: size%B
: byteSentNC%D
: elapsedTime%F
: firstByteTime%h
: host%H
: protocol%I
: threadName%l
: logicalUserName%m
: method%p
: port%q
: query%r
: request%s
: statusCode%S
: sessionId%t
: time%T
: elapsedTimeS%u
: user%U
: path%v
: localServerName%X
: connectionStatus
%c
: cookies%i
: requestHeaders%o
: responseHeaders%r
: requestAttributes%s
: sessionAttributes
アクセス制御
リモートアドレスValve
はじめに
リモートアドレスバルブは、このリクエストを送信したクライアントのIPアドレスを1つまたは複数の正規表現と比較し、リクエストを続行させるか、このクライアントからのリクエストの処理を拒否するかを決定できます。リモートアドレスバルブは、任意のCatalinaコンテナ(Engine、Host、またはContext)に関連付けることができ、処理のためにこのコンテナに提示されたすべてのリクエストを、次に進む前に受け入れる必要があります。
正規表現の構文は、「標準」のワイルドカードマッチングとは異なります。Tomcatはjava.util.regex
パッケージを使用します。サポートされる表現の詳細については、Javaドキュメントを参照してください。
属性addConnectorPort
をtrue
に設定すると、各コネクタに異なる表現を許可するために、サーバーコネクタポートをセミコロン(";")で区切って追加できます。
属性usePeerAddress
をtrue
に設定すると、バルブはチェックで接続ピアアドレスを使用します。これは、Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルとRemoteIp(Valve|Filter)
のいずれかと組み合わせて使用されている場合、クライアントIPとは異なります。
拒否されたリクエストには、ステータスコード403
のレスポンスが返されます。このステータスコードは、属性denyStatus
を使用して上書きできます。
属性invalidAuthenticationWhenDeny
をtrue
に設定すると、リクエストが拒否された場合の動作を、拒否する代わりに無効なauthentication
ヘッダーを設定するように変更できます。これは、コンテキスト属性preemptiveAuthentication="true"
と組み合わせて使用すると便利です。
注: このバルブをIPv6アドレスで使用する場合、注意点があります。このバルブが処理するIPアドレスのフォーマットは、取得に使用されたAPIに依存します。アドレスがInet6Addressクラスを使用してJavaソケットから取得された場合、そのフォーマットはx:x:x:x:x:x:x:x
になります。つまり、localhostのIPアドレスは、より一般的に使用される::1
ではなく、0:0:0:0:0:0:0:1
になります。実際の値については、アクセスログを参照してください。
関連項目: リモートホストバルブ、リモートCIDRバルブ、リモートIPバルブ、HTTPコネクタの設定。
属性
リモートアドレスバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.RemoteAddrValveに設定する必要があります。 |
allow |
リモートクライアントのIPアドレスと比較される正規表現( |
deny |
リモートクライアントのIPアドレスと比較される正規表現( |
denyStatus |
拒否されたリクエストを拒否する際に使用されるHTTPレスポンスステータスコード。デフォルト値は |
addConnectorPort |
サーバーコネクタポートをセミコロン(";")で区切ってクライアントIPアドレスに追加します。これを |
invalidAuthenticationWhenDeny |
リクエストが拒否されるべき場合に、拒否する代わりに無効な これは |
usePeerAddress |
クライアントIPアドレスの代わりに接続ピアアドレスを使用します。Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルと |
例 1
localhostから接続するクライアントのみにアクセスを許可する場合
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>
例 2
localhostから接続するクライアントには無制限のアクセスを許可し、その他のすべてのクライアントにはポート8443のみにアクセスを許可する場合
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
addConnectorPort="true"
allow="127\.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*|.*;8443"/>
例 3
ポート8009への無制限のアクセスを許可し、ただしアプリケーションが別のポートでアクセスされた場合は基本認証をトリガーする場合
<Context>
...
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
addConnectorPort="true"
invalidAuthenticationWhenDeny="true"
allow=".*;8009"/>
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" />
...
</Context>
リモートホストValve
はじめに
リモートホストバルブは、このリクエストを送信したクライアントのホスト名を1つまたは複数の正規表現と比較し、リクエストを続行させるか、このクライアントからのリクエストの処理を拒否するかを決定できます。リモートホストバルブは、任意のCatalinaコンテナ(Engine、Host、またはContext)に関連付けることができ、処理のためにこのコンテナに提示されたすべてのリクエストを、次に進む前に受け入れる必要があります。
正規表現の構文は、「標準」のワイルドカードマッチングとは異なります。Tomcatはjava.util.regex
パッケージを使用します。サポートされる表現の詳細については、Javaドキュメントを参照してください。
属性addConnectorPort
をtrue
に設定すると、各コネクタに異なる表現を許可するために、サーバーコネクタポートをセミコロン(";")で区切って追加できます。
拒否されたリクエストには、ステータスコード403
のレスポンスが返されます。このステータスコードは、属性denyStatus
を使用して上書きできます。
属性invalidAuthenticationWhenDeny
をtrue
に設定すると、リクエストが拒否された場合の動作を、拒否する代わりに無効なauthentication
ヘッダーを設定するように変更できます。これは、コンテキスト属性preemptiveAuthentication="true"
と組み合わせて使用すると便利です。
注: このバルブは、メソッドServletRequest.getRemoteHost()
が返す値を処理します。このメソッドが適切なホスト名を返すようにするには、コネクタで「DNSルックアップ」機能を有効にする必要があります。
関連項目: リモートアドレスバルブ、リモートCIDRバルブ、リモートIPバルブ、HTTPコネクタの設定。
属性
リモートホストバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.RemoteHostValveに設定する必要があります。 |
allow |
リモートクライアントのホスト名と比較される正規表現( |
deny |
リモートクライアントのホスト名と比較される正規表現( |
denyStatus |
拒否されたリクエストを拒否する際に使用されるHTTPレスポンスステータスコード。デフォルト値は |
addConnectorPort |
サーバーコネクタポートをセミコロン(";")で区切ってクライアントホスト名に追加します。これを |
invalidAuthenticationWhenDeny |
リクエストが拒否されるべき場合に、拒否する代わりに無効な これは |
リモートCIDR Valve
はじめに
リモートCIDRバルブは、このリクエストを送信したクライアントのIPアドレスをCIDR表記に従う1つまたは複数のネットマスクと比較し、リクエストを続行させるか、このクライアントからのリクエストの処理を拒否するかを決定できます。IPv4とIPv6の両方が完全にサポートされています。リモートCIDRバルブは、任意のCatalinaコンテナ(Engine、Host、またはContext)に関連付けることができ、処理のためにこのコンテナに提示されたすべてのリクエストを、次に進む前に受け入れる必要があります。
このバルブは、ApacheのOrder
、Allow from
、およびDeny from
ディレクティブを模倣していますが、以下の制限があります。
Order
は常にallow, deny
になります。- ネットマスクのドットクワッド表記はサポートされていません(つまり、
192.168.1.0/255.255.255.0
と記述することはできず、192.168.1.0/24
と記述する必要があります)。 10.10.
のようなショートカット(10.10.0.0/16
に相当)はサポートされていません。- バルブ名が示すように、これはCIDR専用のバルブであるため、
.mydomain.com
のようなサブドメイン表記もサポートされていません。
属性addConnectorPort
をtrue
に設定すると、各コネクタに異なる表現を許可するために、サーバーコネクタポートをセミコロン(";")で区切って追加できます。
属性usePeerAddress
をtrue
に設定すると、バルブはチェックで接続ピアアドレスを使用します。これは、Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルとRemoteIp(Valve|Filter)
のいずれかと組み合わせて使用されている場合、クライアントIPとは異なります。
拒否されたリクエストには、ステータスコード403
のレスポンスが返されます。このステータスコードは、属性denyStatus
を使用して上書きできます。
属性invalidAuthenticationWhenDeny
をtrue
に設定すると、リクエストが拒否された場合の動作を、拒否する代わりに無効なauthentication
ヘッダーを設定するように変更できます。これは、コンテキスト属性preemptiveAuthentication="true"
と組み合わせて使用すると便利です。
このバルブのその他の機能は次のとおりです。
- CIDRプレフィックスを省略すると、このバルブは単一IPバルブになります。
- リモートホストバルブとは異なり、凝縮された形式のIPv6アドレス(
::1
、fe80::/71
など)を処理できます。
関連項目: リモートアドレスバルブ、リモートホストバルブ、リモートIPバルブ、HTTPコネクタの設定。
属性
リモートCIDRバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.RemoteCIDRValveに設定する必要があります。 |
allow |
リモートクライアントのIPアドレスが照合されるIPv4またはIPv6のネットマスクまたはアドレスのカンマ区切りリスト。この属性が指定されている場合、このリクエストが受け入れられるためにはリモートアドレスが一致する必要があります。この属性が指定されていない場合、リモートIPが |
deny |
リモートクライアントのIPアドレスが照合されるIPv4またはIPv6のネットマスクまたはアドレスのカンマ区切りリスト。この属性が指定されている場合、このリクエストが受け入れられるためにはリモートアドレスが一致してはなりません。この属性が指定されていない場合、リクエストの受け入れは |
denyStatus |
拒否されたリクエストを拒否する際に使用されるHTTPレスポンスステータスコード。デフォルト値は |
addConnectorPort |
サーバーコネクタポートをセミコロン(";")で区切ってクライアントIPアドレスに追加します。これを |
invalidAuthenticationWhenDeny |
リクエストが拒否されるべき場合に、拒否する代わりに無効な これは |
usePeerAddress |
クライアントIPアドレスの代わりに接続ピアアドレスを使用します。Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルと |
例 1
localhostから接続するクライアントのみにアクセスを許可する場合
<Valve className="org.apache.catalina.valves.RemoteCIDRValve"
allow="127.0.0.1, ::1"/>
例 2
ローカルネットワークから接続するクライアントには無制限のアクセスを許可し、ネットワーク10.内のすべてのクライアントにはポート8443のみにアクセスを許可する場合
<Valve className="org.apache.catalina.valves.RemoteCIDRValve"
addConnectorPort="true"
allow="127.0.0.1;\d*|::1;\d*|10.0.0.0/8;8443"/>
例 3
ネットワーク10.からポート8009へのアクセスを許可し、ただしアプリケーションが別のポートでアクセスされた場合は基本認証をトリガーする場合
<Context>
...
<Valve className="org.apache.catalina.valves.RemoteCIDRValve"
addConnectorPort="true"
invalidAuthenticationWhenDeny="true"
allow="10.0.0.0/8;8009"/>
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" />
...
</Context>
プロキシのサポート
ロードバランサー ドレイニング Valve
はじめに
mod_jkまたはmod_proxy_ajpを使用する場合、クライアントのセッションIDは、どのバックエンドサーバーがリクエストを処理するために使用されるかを決定するために使用されます。ターゲットノードが「ドレイン中」(mod_jkではDISABLED状態、mod_proxy_ajpではDrain (N)状態)である場合、期限切れのセッションに対するリクエストが、実際にドレイン中のノードがドレインに失敗する原因となることがあります。
残念ながら、AJPベースのロードバランサーは、クライアントが提供したセッションIDが有効であるかどうかを証明できないため、そのノードをターゲットとしているように見えるセッションに対するすべてのリクエストを無効化された(または「ドレイン中」の)ノードに送信し、結果として「ドレイン」プロセスが不要に長引く原因となります。
このバルブは、無効なセッションに対するリクエストを検出し、リクエストからセッション情報を削除し、同じURLにリダイレクトします。これにより、ロードバランサーはリクエストを処理するために別の(アクティブな)ノードを選択するはずです。これにより、無効化されたノードの「ドレイン」プロセスが高速化されます。
ノードのアクティベーション状態はロードバランサーによってリクエストで送信されるため、無効化されるノードでの状態変更は不要です。このバルブをバルブパイプラインに設定するだけで、アクティベーション状態が「disabled」に設定されたときにアクションが実行されます。
このバルブは、認証バルブよりもバルブパイプラインの早い段階で登録するよう注意してください。なぜなら、このバルブは、認証バルブが保護されたリソースへのリクエストを保存する前にリクエストをリダイレクトできる必要があるからです。もしそうなった場合、新しいセッションが作成され、新しい有効なセッションが確立されるため、ドレインプロセスが停滞します。
属性
ロードバランサー ドレインバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.LoadBalancerDrainingValveに設定する必要があります。 |
redirectStatusCode |
クライアントがロードバランサーによって再バランスされるためにリダイレクトされる際に使用されるカスタムリダイレクトコードを設定できます。デフォルトは307 TEMPORARY_REDIRECTです。 |
ignoreCookieName |
|
ignoreCookieValue |
|
リモートIP Valve
はじめに
mod_remoteipのTomcatポートであるこのバルブは、リクエストの表示上のクライアントリモートIPアドレスとホスト名を、プロキシまたはロードバランサーがリクエストヘッダー(例: 「X-Forwarded-For」)経由で提示するIPアドレスリストに置き換えます。
このバルブのもう1つの機能は、表示上のスキーム(http/https)、サーバーポート、およびrequest.secure
を、プロキシまたはロードバランサーがリクエストヘッダー(例: 「X-Forwarded-Proto」)経由で提示するスキームに置き換えることです。
このバルブは、必要に応じてEngine
、Host
、またはContext
レベルで使用できます。通常、このバルブはEngine
レベルで使用されます。
リモートアドレス/ホストバルブと組み合わせて使用する場合、正しいクライアントIPアドレスがリモートアドレス/ホストバルブに提示されるように、このバルブを最初に定義する必要があります。
注: デフォルトでは、このバルブはアクセスログに書き込まれる値に影響を与えません。元の値は、リクエスト処理がバルブを離れるときに復元され、それは常にアクセスロギングよりも早く発生します。このバルブによって設定されたリモートアドレス、リモートホスト、サーバーポート、およびプロトコルの値をアクセスログに渡すには、それらはリクエスト属性に格納されます。ここでこれらの値を公開することはデフォルトで有効になっていますが、AccessLogValve
はそれらを使用するように明示的に設定する必要があります。AccessLogValve
のrequestAttributesEnabled
属性のドキュメントを参照してください。
このバルブによって設定され、アクセスロギングで使用できるリクエスト属性の名前は次のとおりです。
org.apache.catalina.AccessLog.RemoteAddr
org.apache.catalina.AccessLog.RemoteHost
org.apache.catalina.AccessLog.Protocol
org.apache.catalina.AccessLog.ServerPort
org.apache.tomcat.remoteAddr
属性
リモートIPバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.RemoteIpValveに設定する必要があります。 |
remoteIpHeader |
要求元のクライアントから始まる、経由したIPアドレスのリストを保持するこのバルブによって読み取られるHTTPヘッダーの名前。指定されていない場合、デフォルトの |
internalProxies |
プロキシのIPアドレスが内部プロキシと見なされるために一致しなければならない正規表現( |
proxiesHeader |
受信したremoteIpHeaderで処理されたプロキシのリストを保持するためにこのバルブによって作成されるHTTPヘッダーの名前。指定されていない場合、デフォルトの |
requestAttributesEnabled |
|
trustedProxies |
プロキシのIPアドレスが信頼されたプロキシと見なされるために一致しなければならない正規表現( |
protocolHeader |
クライアントがプロキシに接続するために使用したプロトコルを保持するこのバルブによって読み取られるHTTPヘッダーの名前。指定されていない場合、デフォルトの |
hostHeader |
クライアントがプロキシに接続するために使用したホストを保持するこのバルブによって読み取られるHTTPヘッダーの名前。指定されていない場合、デフォルトの |
portHeader |
クライアントがプロキシに接続するために使用したポートを保持するこのバルブによって読み取られるHTTPヘッダーの名前。指定されていない場合、デフォルトの |
protocolHeaderHttpsValue |
HTTPSリクエストであることを示すprotocolHeaderの値。指定されていない場合、デフォルトの |
httpServerPort |
protocolHeaderが |
httpsServerPort |
protocolHeaderが |
changeLocalName |
|
changeLocalPort |
|
SSL Valve
はじめに
mod_proxy_httpを使用する場合、クライアントのSSL情報はプロトコルに含まれません(mod_jkやmod_proxy_ajpとは異なります)。クライアントSSL情報をTomcatで利用できるようにするには、追加の設定が必要です。httpdでは、mod_headersを使用してSSL情報をHTTPヘッダーとして追加します。Tomcatでは、このバルブを使用してHTTPヘッダーから情報を読み取り、リクエストに挿入します。
注意: クライアントが偽のヘッダーを送信してSSL情報を偽装するのを防ぐため、httpdによってすべてのリクエストに対して常にヘッダーが設定されるようにしてください。
httpdが必要なヘッダーを設定するように構成するには、以下を追加します。
<IfModule ssl_module>
RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"
RequestHeader set SSL_CIPHER "%{SSL_CIPHER}s"
RequestHeader set SSL_SESSION_ID "%{SSL_SESSION_ID}s"
RequestHeader set SSL_CIPHER_USEKEYSIZE "%{SSL_CIPHER_USEKEYSIZE}s"
</IfModule>
属性
SSLバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.SSLValveに設定する必要があります。 |
sslClientCertHeader |
ssl_client_certヘッダーのカスタム名を指定できます。指定されていない場合、デフォルトの |
sslClientEscapedCertHeader |
ssl_client_escaped_certヘッダーのカスタム名を指定できます。指定されていない場合、デフォルトの このヘッダーはNginxプロキシに役立ち、ssl_client_certヘッダーよりも優先されます。 |
sslCipherHeader |
ssl_cipherヘッダーのカスタム名を指定できます。指定されていない場合、デフォルトの |
sslSessionIdHeader |
ssl_session_idヘッダーのカスタム名を指定できます。指定されていない場合、デフォルトの |
sslCipherUserKeySizeHeader |
ssl_cipher_usekeysizeヘッダーのカスタム名を指定できます。指定されていない場合、デフォルトの |
シングルサインオンValve
はじめに
シングルサインオンバルブは、ユーザーが仮想ホストに関連付けられた任意のウェブアプリケーションにサインオンし、その後、同じ仮想ホスト上の他のすべてのウェブアプリケーションによってそのIDが認識されるようにしたい場合に使用されます。
詳細については、Host要素のシングルサインオンの特別な機能を参照してください。
属性
シングルサインオンバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.authenticator.SingleSignOnに設定する必要があります。 |
requireReauthentication |
デフォルトはfalse。各リクエストがセキュリティレルムに再認証される必要があるかどうかを決定するフラグ。「true」の場合、このバルブはキャッシュされたセキュリティ資格情報(ユーザー名とパスワード)を使用して、SSOセッションに関連付けられた各リクエストをレルムに再認証します。「false」の場合、バルブ自体が有効なSSOクッキーの存在に基づいてリクエストを認証でき、レルムを再確認する必要はありません。 |
cookieDomain |
SSOクッキーに使用するホストドメインを設定します。 |
cookieName |
SSOクッキーに使用するクッキー名を設定します。デフォルト値は |
認証
このセクションのバルブは、org.apache.catalina.Authenticatorインターフェースを実装しています。
Basic認証Authenticator Valve
はじめに
属性
基本認証バルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値は |
alwaysUseSession |
ユーザーが認証されたら常にセッションを使用すべきか?これにより、セッションが認証されたプリンシパルをキャッシュするために使用できるため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなるため、いくつかのパフォーマンス上の利点が得られる可能性があります。これは、JNDIRealmまたはDataSourceRealmsとともに使用されるBASIC認証などの組み合わせに役立つ場合があります。ただし、セッションの作成とGCにもパフォーマンスコストがかかります。設定されていない場合、デフォルト値の |
cache |
リクエストがHTTPセッションの一部である場合、認証されたプリンシパルをキャッシュすべきか?指定されていない場合、デフォルト値の |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合に、セッションIDを変更するかどうかを制御します。これはセッション固定攻撃を防ぐためです。設定されていない場合、デフォルト値の |
charset |
RFC 7617に従い、 |
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.authenticator.BasicAuthenticatorに設定する必要があります。 |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPICによって使用されるべき |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッションIDを生成する |
secureRandomClass |
SSOセッションIDを生成するために使用する |
secureRandomProvider |
SSOセッションIDを生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストに対して、認証情報(リモートユーザーと認証タイプ)をレスポンスヘッダーとして返すかどうかを制御します。 |
Digest認証Authenticator Valve
はじめに
属性
ダイジェスト認証バルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
algorithms |
認証プロセスに使用されるダイジェストアルゴリズムのカンマ区切りリスト。アルゴリズムは、Java標準名またはRFC 7616で使用される名前で指定できます。指定されていない場合、デフォルト値の |
allowCorsPreflight |
CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値は |
alwaysUseSession |
ユーザーが認証されたら常にセッションを使用すべきか?これにより、セッションが認証されたプリンシパルをキャッシュするために使用できるため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなるため、いくつかのパフォーマンス上の利点が得られる可能性があります。これは、JNDIRealmまたはDataSourceRealmsとともに使用されるBASIC認証などの組み合わせに役立つ場合があります。ただし、セッションの作成とGCにもパフォーマンスコストがかかります。設定されていない場合、デフォルト値の |
cache |
リクエストがHTTPセッションの一部である場合、認証されたプリンシパルをキャッシュすべきか?指定されていない場合、デフォルト値の |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合に、セッションIDを変更するかどうかを制御します。これはセッション固定攻撃を防ぐためです。設定されていない場合、デフォルト値の |
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.authenticator.DigestAuthenticatorに設定する必要があります。 |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPICによって使用されるべき |
key |
ダイジェスト認証で使用される秘密鍵。設定されていない場合、セキュアなランダム値が生成されます。これは通常、サーバーの再起動時やクラスター全体でキー値を一定に保つ必要がある場合にのみ設定すべきです。 |
nonceCacheSize |
リプレイ攻撃から保護するために、DIGEST認証はサーバーのナンス値とナンスカウント値を追跡します。この属性は、そのキャッシュのサイズを制御します。指定されていない場合、デフォルト値の1000が使用されます。 |
nonceCountWindowSize |
クライアントのリクエストは順不同で処理される可能性があり、それはナンスカウント値も順不同で処理される可能性があることを意味します。ナンスカウントが順不同で提示された場合の認証失敗を防ぐために、認証器はナンスカウント値のウィンドウを追跡します。この属性は、そのウィンドウのサイズを制御します。指定されていない場合、デフォルト値の100が使用されます。 |
nonceValidity |
サーバーが生成したナンスが認証に使用するのに有効と見なされる時間(ミリ秒単位)。指定されていない場合、デフォルト値の300000(5分)が使用されます。 |
opaque |
ダイジェスト認証で使用される不透明なサーバー文字列。設定されていない場合、ランダムな値が生成されます。これは通常、サーバーの再起動時やクラスター全体で不透明な値を一定に保つ必要がある場合にのみ設定すべきです。 |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッションIDを生成する |
secureRandomClass |
SSOセッションIDを生成するために使用する |
secureRandomProvider |
SSOセッションIDを生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストに対して、認証情報(リモートユーザーと認証タイプ)をレスポンスヘッダーとして返すかどうかを制御します。 |
validateUri |
RFC2617で要求されているようにURIを検証すべきか?指定されていない場合、デフォルト値の |
フォーム認証Authenticator Valve
はじめに
属性
フォーム認証バルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値は |
authenticationSessionTimeout |
認証プロセスがセッションを作成する場合、これは認証プロセス中の最大セッションタイムアウト(秒単位)です。認証が完了すると、デフォルトのセッションタイムアウトが適用されます。認証プロセス開始前に存在するセッションは、元のセッションタイムアウトを保持します。設定されていない場合、デフォルト値の |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合に、セッションIDを変更するかどうかを制御します。これはセッション固定攻撃を防ぐためです。設定されていない場合、デフォルト値の |
characterEncoding |
リクエストからユーザー名とパスワードのパラメータを読み取るために使用する文字エンコーディング。設定されていない場合、リクエストボディのエンコーディングが使用されます。 |
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.authenticator.FormAuthenticatorに設定する必要があります。 |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPICによって使用されるべき |
landingPage |
ログインページを直接リクエストしたり、セッションが期限切れになるほどログインを遅らせたりするなど、フォーム認証プロセスが誤用された場合の動作を制御します。この属性が設定されている場合、エラーレスポンスコードを返す代わりに、ログインフォームが有効な資格情報で送信された場合に、Tomcatはユーザーを指定されたランディングページにリダイレクトします。ログインが処理されるためには、ランディングページは保護されたリソース(つまり、認証を必要とするもの)である必要があります。ランディングページが認証を必要としない場合、ユーザーはログインされず、保護されたページにアクセスする際に資格情報を再度要求されます。 |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッションIDを生成する |
secureRandomClass |
SSOセッションIDを生成するために使用する |
secureRandomProvider |
SSOセッションIDを生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストに対して、認証情報(リモートユーザーと認証タイプ)をレスポンスヘッダーとして返すかどうかを制御します。 |
SSL認証Authenticator Valve
はじめに
属性
SSL認証バルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値は |
cache |
リクエストがHTTPセッションの一部である場合、認証されたプリンシパルをキャッシュすべきか?指定されていない場合、デフォルト値の |
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.authenticator.SSLAuthenticatorに設定する必要があります。 |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合に、セッションIDを変更するかどうかを制御します。これはセッション固定攻撃を防ぐためです。設定されていない場合、デフォルト値の |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPICによって使用されるべき |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッションIDを生成する |
secureRandomClass |
SSOセッションIDを生成するために使用する |
secureRandomProvider |
SSOセッションIDを生成する |
SPNEGO Valve
はじめに
属性
SPNEGO認証バルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値は |
alwaysUseSession |
ユーザーが認証されたら常にセッションを使用すべきか?これにより、セッションが認証されたプリンシパルをキャッシュするために使用できるため、すべてのリクエストでユーザーを認証する必要がなくなるため、いくつかのパフォーマンス上の利点が得られる可能性があります。これは、サーバーが認証されたユーザーをキャッシュすると仮定するクライアントにも役立ちます。ただし、セッションの作成とGCにもパフォーマンスコストがかかります。代替ソリューションについては、 |
applyJava8u40Fix |
Java 8 Update 40(JDK-8048194)以降で導入された修正により、Windows 2008 R2サーバー上でTomcatを実行しているIEでのSPNEGO認証が破損しました。このオプションは、SPNEGO認証が引き続き機能するようにする回避策を有効にします。この回避策は他の設定に影響を与えないはずなので、デフォルトで有効になっています。必要に応じて、この属性を |
cache |
リクエストがHTTPセッションの一部である場合、認証されたプリンシパルをキャッシュすべきか?指定されていない場合、デフォルト値の |
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.authenticator.SpnegoAuthenticatorに設定する必要があります。 |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合に、セッションIDを変更するかどうかを制御します。これはセッション固定攻撃を防ぐためです。設定されていない場合、デフォルト値の |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPICによって使用されるべき |
loginConfigName |
サービスとしてログインするために使用されるJAASログイン設定の名前。指定されていない場合、デフォルトの |
noKeepAliveUserAgents |
一部のクライアント(ほとんどのブラウザではない)は、サーバーが接続の認証済みユーザー情報をキャッシュし、すべてのリクエストで資格情報を再送信しないと想定しています。Tomcatは、HTTPセッションが利用可能でない限り、これを実行しません。セッションは、アプリケーションがセッションを作成した場合、またはこの認証器で セッションを作成する代替手段として、この属性を使用してHTTP keep-aliveが無効になるユーザーエージェントを定義できます。これは、接続が単一のリクエストにのみ使用され、接続ごとの認証済みユーザー情報をキャッシュする機能がないことを意味します。HTTP keep-aliveを無効にするとパフォーマンスコストが発生します。 この属性は、ユーザーエージェント文字列全体に一致する正規表現である必要があります(例: |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッションIDを生成する |
secureRandomClass |
SSOセッションIDを生成するために使用する |
secureRandomProvider |
SSOセッションIDを生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストに対して、認証情報(リモートユーザーと認証タイプ)をレスポンスヘッダーとして返すかどうかを制御します。 |
storeDelegatedCredential |
ユーザーの委任された資格情報がユーザープリンシパルに保存されるかどうかを制御します。利用可能な場合、委任された資格情報は |
エラーレポートValve
はじめに
エラーレポートバルブは、HTTPステータスコードの単純なエラーハンドラであり、HTMLエラーページを生成して返します。特定のステータスコードや例外タイプに対して、事前に定義された静的なHTMLページを返すように設定することもできます。
注: showServerInfoとshowReportの両方を無効にすると、HTTPステータスコードのみが返されます。
属性
エラーレポートバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。デフォルトのエラーレポートバルブを使用するには、org.apache.catalina.valves.ErrorReportValveに設定する必要があります。 |
errorCode.nnn |
|
exceptionType.fullyQualifiedClassName |
エラーが発生し、 |
showReport |
エラー発生時にエラーレポート(カスタムエラーメッセージやスタックトレース)を提示するかどうかを決定するフラグ。 |
showServerInfo |
エラー発生時にサーバー情報が提示されるかどうかを決定するフラグ。 |
JsonエラーレポートValve
はじめに
JSONエラーレポートバルブは、HTTPステータスコードの単純なエラーハンドラであり、JSONエラーメッセージを返します。
このクラスをHost
のerrorReportValveClass
属性で指定すると、ErrorReportValve
の代わりに使用され、HTMLの代わりにJSONレスポンスが返されます。
属性
JSONエラーレポートバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.JsonErrorReportValveに設定する必要があります。 |
プロキシエラーレポートValve
はじめに
プロキシエラーレポートバルブは、HTTPステータスコードの単純なエラーハンドラであり、エラーレポートの生成を担当する別の場所にリダイレクトまたはプロキシします。
このクラスをHost
のerrorReportValveClass
属性で指定すると、デフォルトの属性値を持つErrorReportValve
の代わりに使用されます。属性を設定するには、バルブをHost
要素内にネストして定義できます。
属性
プロキシエラーレポートバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.ProxyErrorReportValveに設定する必要があります。 |
usePropertiesFile |
|
useRedirect |
|
設定
プロキシエラーレポートバルブは、クラスパスからリソースファイルProxyErrorReportValve.propertiesを使用でき、各エントリはstatusCode=baseUrlです。baseUrlには、URLパラメータ、statusCode、statusDescription、requestUri、throwableを含めるべきではありません。これらは自動的に追加されます。0
という特殊なキーは、マッピングされていない他のコードをリダイレクトまたはプロキシURLに一致させるために使用する必要があります。
クローラーセッションマネージャーValve
はじめに
ウェブクローラーはサイトをクロールする際に何千ものセッションの作成をトリガーする可能性があり、これはかなりのメモリ消費につながる可能性があります。このバルブは、クローラーがリクエストにセッショントークンを提供するかどうかにかかわらず、通常のユーザーと同様に単一のセッションに関連付けられるようにします。
このバルブは、必要に応じてEngine
、Host
、またはContext
レベルで使用できます。通常、このバルブはEngine
レベルで使用されます。
リモートIPバルブと組み合わせて使用する場合、正しいクライアントIPアドレスがこのバルブに提示されるように、リモートIPバルブをこのバルブの前に定義する必要があります。
属性
クローラーセッションマネージャーバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.CrawlerSessionManagerValveに設定する必要があります。 |
contextAware |
クライアントIPとコンテキスト名を組み合わせて再利用するセッションを識別するためのフラグ。 |
crawlerIps |
リクエストがウェブクローラーからのものであるかどうかを判断するために、クライアントIPが照合される正規表現( |
crawlerUserAgents |
リクエストがウェブクローラーからのものであるかどうかを判断するために、ユーザーエージェントHTTPリクエストヘッダーが照合される正規表現( |
hostAware |
クライアントIPと設定されたホストを組み合わせて再利用するセッションを識別するためのフラグ。 |
sessionInactiveInterval |
クローラーセッションマネージャーバルブが、クライアントからのアクティビティなしに、クライアントIPとセッションIDのマッピングをメモリに保持すべき最小時間(秒単位)。この間隔よりも長く非アクティブであったマッピングは、クライアントIP / セッションキャッシュから定期的にパージされます。指定されていない場合、デフォルト値の |
スタックしたスレッド検出Valve
はじめに
このバルブは、処理に時間がかかるリクエストを検出することを可能にし、それはそのリクエストを処理しているスレッドがスタックしていることを示している可能性があります。さらに、オプションでそのようなスレッドを中断して、ブロック解除を試みることができます。
そのようなリクエストが検出されると、そのスレッドの現在のスタックトレースがWARNレベルでTomcatログに書き込まれます。
スタックしたスレッドのIDと名前は、JMXのstuckThreadIds
およびstuckThreadNames
属性を通じて利用できます。IDは、標準のThreading JVM MBean(java.lang:type=Threading
)とともに使用して、各スタックしたスレッドに関するその他の情報を取得できます。
属性
スタックしたスレッド検出バルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.StuckThreadDetectionValveに設定する必要があります。 |
threshold |
スレッドがスタックしていると見なされるまでの最小時間(秒単位)。デフォルトは600秒です。0に設定すると、検出が無効になります。 注: 検出(およびオプションの中断)は、このバルブを宣言するコンテナ(Engine、Host、またはContext)のバックグラウンドスレッドで行われるため、閾値はこのコンテナの |
interruptThreadThreshold |
スタックしたスレッドを「解放」するために中断を試みるべき最小時間(秒単位)。 スレッドがスタック解除される保証はありません。これは通常、I/Oやロックでスタックしたスレッドには効果的ですが、無限ループの場合はおそらく役に立ちません。 デフォルトは-1で、この機能を無効にします。有効にするには、値は |
セマフォValve
はじめに
セマフォバルブは、同時リクエスト処理スレッドの数を制限することができます。
org.apache.catalina.valves.SemaphoreValveは、サブクラスが動作をカスタマイズするためにオーバーライドできるメソッドを提供します。
controlConcurrency
は、条件を追加するためにオーバーライドできます。permitDenied
は、許可が付与されない場合にエラーハンドリングを追加するためにオーバーライドできます。
属性
セマフォバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
block |
許可が利用可能になるまでスレッドがブロックされるかどうかを決定するフラグ。デフォルト値はtrueです。 |
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.SemaphoreValveに設定する必要があります。 |
concurrency |
セマフォの並行性レベル。デフォルト値は10です。 |
fairness |
セマフォの公平性。デフォルト値はfalseです。 |
highConcurrencyStatus |
セマフォから許可を取得できない場合に、値が正であるならば、クライアントに返されるエラーステータスコード。デフォルト値は-1で、これはエラーが返されないことを意味します。 |
interruptible |
許可が利用可能になるまでスレッドが中断されるかどうかを決定するフラグ。デフォルト値はfalseです。 |
ヘルスチェックValve
はじめに
ヘルスチェックバルブは、クラウドオーケストレーターのヘルスチェックに応答します。
属性
ヘルスチェックバルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.HealthCheckValveに設定する必要があります。 |
path |
クラウドオーケストレーターのヘルスチェックロジックによるパス。バルブがコンテキストに関連付けられている場合、これはコンテキストパスからの相対パスになります。それ以外の場合、バルブは完全なURIに一致します。デフォルト値は/healthです。 |
checkContainersAvailable |
|
永続化Valve
はじめに
リクエストごとのセッション永続化を実装するPersistentValve。これは非スティッキーロードバランサーでの使用を意図しています。
属性
PersistentValveは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.PersistentValveに設定する必要があります。 |
filter |
既知のファイル拡張子またはURLの場合、このフィルターパターンを使用して、このリクエスト中にセッションが不要であることをバルブに通知できます。リクエストがこのフィルターパターンに一致する場合、バルブはセッションを復元する必要がなかったと見なします。フィルターの例は |
semaphoreAcquireUninterruptibly |
セッションごとのセマフォを待機してブロックするスレッドが、割り込みなしでそうすべきかどうかを決定するフラグ。semaphoreBlockOnAcquireが |
semaphoreBlockOnAcquire |
別のスレッドによって保持されている場合にセッションごとのセマフォを取得したいスレッドが、セマフォを取得できるまでブロックすべきか、または待機中のリクエストが拒否されるべきかを決定するフラグ。指定されていない場合、デフォルト値の |
semaphoreFairness |
セッションごとのセマフォが、リクエストを受け取った順序でセマフォに対するリクエストを許可するかどうかを決定するフラグ。semaphoreBlockOnAcquireが |
パラメーター制限Valve
はじめに
パラメータ制限バルブは、コネクタの値をオーバーライドしてHTTPリクエストで許可されるパラメータの数を制限するために使用されます。このバルブは、特定のURLパターンに固有の制限を設定できます。定義されたパラメータ制限を超えるリクエストは、HTTP 400 Bad Requestエラーになります。
属性
パラメータ制限バルブは、次の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これはorg.apache.catalina.valves.ParameterLimitValveに設定する必要があります。 |
resourcePath |
行で区切られたURLパターンとそのそれぞれのパラメータ制限からなるファイル。各エントリは 単一の整数が提供された場合、それは |