Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
第16章 Web サーバーの設定 (Undertow)
16.1. Undertow サブシステムの概要
JBoss EAP 7 では、JBoss EAP 6 の web
サブシステムの代わりに undertow
サブシステムが使用されます。
undertow
サブシステムは、Web サーバーおよびサーブレットコンテナーの設定を可能にします。Java Servlet 3.1 仕様や WebSocket を実装し、HTTP Upgrade をサポートします。また、サーブレットデプロイメントでパフォーマンスの高い非ブロッキングハンドラーの使用をサポートします。undertow
サブシステムは、mod_cluster をサポートする高パフォーマンスなリバースプロキシとして動作することも可能です。
undertow
サブシステム内で設定する主なコンポーネントは 5 つあります。
JBoss EAP には、これらの各コンポーネントの設定を更新する機能がありますが、デフォルト設定は妥当なパフォーマンスの設定を提供し、ほとんどのユースケースに適しています。
デフォルトの Undertow サブシステムの設定
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host> </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> <filters> <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/> <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/> </filters> </subsystem>
また、undertow
サブシステムは io
サブシステムに依存して XNIO ワーカーやバッファープールを提供します。io
サブシステムは個別に設定され、ほとんどの場合で最適なパフォーマンスを得られるデフォルト設定を提供します。
JBoss EAP 6 の web
サブシステムと比較すると、JBoss EAP 7 の undertow
サブシステムでは HTTP メソッドのデフォルト動作が異なります。
16.2. バッファーキャッシュの設定
バッファーキャッシュは静的リソースをキャッシュするために使用されます。JBoss EAP では複数のキャッシュを設定でき、デプロイメントによる参照が可能であるため、デプロイメントごとに異なるキャッシュサイズを使用することができます。バッファーは固定サイズで、リージョンで割り当てられます。使用領域の合計は、バッファーサイズ、リージョンごとのバッファー数、およびリージョンの最大数を掛けて算出できます。バッファーキャッシュのデフォルトサイズは 10MB です。
JBoss EAP はデフォルトで単一のキャッシュを提供します。
デフォルトの Undertow サブシステムの設定
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> <buffer-cache name="default"/> .... </subsystem>
既存のバッファーキャッシュの更新
既存のバッファーキャッシュを更新するには、以下を指定します。
/subsystem=undertow/buffer-cache=default/:write-attribute(name=buffer-size,value=2048)
reload
新規バッファーキャッシュの作成
新しいバッファーキャッシュを作成するには、以下を指定します。
/subsystem=undertow/buffer-cache=new-buffer:add
バッファーキャッシュの削除
バッファーキャッシュを削除するには、以下を指定します。
/subsystem=undertow/buffer-cache=new-buffer:remove
reload
バッファーキャッシュの設定に使用できる属性の完全リストは、「Undertow サブシステムの属性」の項を参照してください。
16.3. サーバーの設定
サーバーは Undertow のインスタンスを表し、複数の要素で構成されます。
- host
- http-listener
- https-listener
- ajp-listener
ホスト要素は仮想ホスト設定を提供し、3 つのリスナーはそのタイプの接続を Undertow インスタンスに提供します。
複数のサーバーを設定でき、デプロイメントやサーバーを完全に分離できます。これは、マルチテナント環境などで便利です。
JBoss EAP はデフォルトでサーバーを提供します。
デフォルトの Undertow サブシステムの設定
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host> </server> ... </subsystem>
以下の例は、管理 CLI を使用してサーバーを設定する方法を示しています。管理コンソールを使用してサーバーを設定する場合は、Configuration → Subsystems → Web/HTTP - Undertow → HTTP → View と選択した後、HTTP Server タブを選択します。
既存のサーバーの更新
既存のサーバーを更新するには、以下を設定します。
/subsystem=undertow/server=default-server:write-attribute(name=default-host,value=default-host)
reload
新規サーバーの作成
新規サーバーを作成するには、以下を指定します。
/subsystem=undertow/server=new-server:add
reload
サーバーの削除
サーバーを削除するには、以下を指定します。
/subsystem=undertow/server=new-server:remove
reload
サーバーの設定に使用できる属性の完全リストは、「Undertow サブシステムの属性」の項を参照してください。
16.4. サーブレットコンテナーの設定
サーブレットコンテナーは、すべてのサーブレット、 JSP、およびソケット関連の設定 (セッションに関連する設定を含む) を提供します。ほとんどのサーバーにはサーブレットコンテナーが 1 つだけ必要ですが、servlet-container
要素を追加すると複数のサーブレットコンテナーを設定することができます。サーブレットコンテナーが複数設定されていると、複数のデプロイメントを異なる仮想ホストの同じコンテキストパスにデプロイできるなど、一部の動作を有効にすることができます。
サーブレットコンテナーによって提供される設定の多くは、デプロイされたアプリケーションが web.xml
ファイルを使用して個別にオーバーライドできます。
JBoss EAP はデフォルトでサーブレットコンテナーを提供します。
デフォルトの Undertow サブシステムの設定
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> <buffer-cache name="default"/> <server name="default-server"> ... </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> ... </subsystem>
以下の例は、管理 CLI を使用してサーブレットコンテナーを設定する方法を示しています。管理コンソールを使用してサーブレットコンテナーを設定する場合は、Configuration → Subsystems → Web/HTTP - Undertow → Servlet/JSP → View と選択します。
既存のサーブレットコンテナーの更新
既存のサーブレットコンテナーを更新するには、以下を指定します。
/subsystem=undertow/servlet-container=default:write-attribute(name=ignore-flush,value=true)
reload
新規サーブレットコンテナーの作成
新規のサーブレットコンテナーを作成するには、以下を指定します。
/subsystem=undertow/servlet-container=new-servlet-container:add
reload
サーブレットコンテナーの削除
サーブレットコンテナーを削除するには、以下を指定します。
/subsystem=undertow/servlet-container=new-servlet-container:remove
reload
サーブレットコンテナーの設定に使用できる属性の完全リストは、「Undertow サブシステムの属性」の項を参照してください。
16.5. Configuring a Servlet Extension
Servlet extensions allow you to hook into the servlet deployment process and modify aspects of a servlet deployment. This can be useful in cases where you need to add additional authentication mechanisms to a deployment or use native Undertow handlers as part of a servlet deployment.
To create a custom servlet extension, it is necessary to implement the io.undertow.servlet.ServletExtension
interface and then add the name of your implementation class to the META-INF/services/io.undertow.servlet.ServletExtension
file in the deployment. You also need to include the compiled class file of the ServletExtension
implementation. When Undertow deploys the servlet, it loads all the services from the deployments
class loader and then invokes their handleDeployment
methods.
An Undertow DeploymentInfo
structure, which contains a complete and mutable description of the deployment, is passed to this method. You can modify this structure to change any aspect of the deployment.
The DeploymentInfo
structure is the same structure that is used by the embedded API, so in effect a ServletExtension
has the same amount of flexibility that you have when using Undertow in embedded mode.
16.6. ハンドラーの設定
JBoss EAP では、2 つのタイプのハンドラーを設定できます。
- ファイルハンドラー
- リバースプロキシハンドラー
ファイルハンドラーは静的ファイルに対応します。各ファイルハンドラーは仮想ホストの場所にアタッチされている必要があります。リバースプロキシーハンドラーによって、JBoss EAP は高パフォーマンスなリバースプロキシーとして機能することができます。
JBoss EAP はデフォルトでファイルハンドラーを提供します。
デフォルトの Undertow サブシステムの設定
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> <buffer-cache name="default"/> <server name="default-server"> ... </server> <servlet-container name="default"> ... </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> ... </subsystem>
静的リソースに WebDAV を使用
過去のバージョンの JBoss EAP では、web
サブシステムで WebDAV を使用して (WebdavServlet
経由) 静的リソースをホストし、追加の HTTP メソッドを有効にしてこれらのファイルへのアクセスや操作を実行できました。JBoss EAP 7 では、ファイルハンドラーを経由した静的ファイルの対応メカニズムは undertow
サブシステムによって提供されますが、undertow
サブシステムは WebDAV をサポートしません。JBoss EAP 7 で WebDAV を使用する場合は、カスタムの WebDav サーブレットを記述してください。
既存のファイルハンドラーの更新
既存のファイルハンドラーを更新するには、以下を指定します。
/subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=case-sensitive,value=true)
reload
新規ファイルハンドラーの作成
新規のファイルハンドラーを作成するには、以下を指定します。
/subsystem=undertow/configuration=handler/file=new-file-handler:add(path="${jboss.home.dir}/welcome-content")
ファイルハンドラーの path
を直接ディレクトリーではなくファイルに設定した場合、そのファイルハンドラーを参照する location
要素の最後にフォワードスラッシュ (/
) を付けないでください。最後にフォワードスラッシュが付くと、404 - Not Found
が返されます。
ファイルハンドラーの削除
ファイルハンドラーを削除するには、以下を指定します。
/subsystem=undertow/configuration=handler/file=new-file-handler:remove
reload
ハンドラーの設定に使用できる属性の完全リストは、「Undertow サブシステムの属性」の項を参照してください。
16.7. フィルターの設定
フィルターはリクエストの一部の変更を可能にし、述語を使用してフィルターの実行時を制御できます。フィルターの一般的なユースケースには、ヘッダーの設定や GZIP 圧縮などがあります。
フィルターの機能は、JBoss EAP 6 で使用されたグローバルバルブと同等です。
以下のタイプのフィルターを定義できます。
- custom-filter
- error-page
- expression-filter
- gzip
- mod-cluster
- request-limit
- response-header
- rewrite
JBoss EAP はデフォルトで 2 つのフィルターを提供します。
デフォルトの Undertow サブシステムの設定
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> <buffer-cache name="default"/> <server name="default-server"> ... </server> <servlet-container name="default"> ... </servlet-container> <handlers> ... </handlers> <filters> <response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/> <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/> </filters> </subsystem>
以下の例は、管理 CLI を使用してフィルターを設定する方法を示しています。管理コンソールを使用してフィルターを設定する場合は、Configuration → Subsystems → Web/HTTP - Undertow → Filters → View と選択します。
既存のフィルターの更新
既存のフィルターを更新するには、以下を指定します。
/subsystem=undertow/configuration=filter/response-header=server-header:write-attribute(name=header-value,value="JBoss-EAP")
reload
新規のフィルターの作成
新規のフィルターを作成するには、以下を指定します。
/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")
フィルターの削除
フィルターを削除するには、以下を指定します。
/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
reload
フィルターの設定に使用できる属性の完全リストは「Undertow サブシステムの属性」の項を参照してください。
16.7.1. buffer-request ハンドラーの設定
クライアントまたはブラウザーからのリクエストは、ヘッダーとボディーの 2 つで構成されます。通常の場合、ヘッダーとボディーの間に遅延がない状態で JBoss EAP に送信されます。しかし、ヘッダーが最初に送信され、その数秒後にボディーが送信されると、完全なリクエストの送信に遅延が発生します。このような場合、JBoss EAP にスレッドが作成され、完全なリクエストの実行を待機していることを示す waiting
が表示されます。
リクエストのヘッダーおよびボティーの送信による遅延は、buffer-request
ハンドラーを使用して修正できます。buffer-request
ハンドラーは、ワーカースレッドに割り当てする前に、非ブロッキング IO スレッドからリクエストの消費を試みます。追加された buffer-request
ハンドラーがない場合、スレッドは直接ワーカースレッドに割り当てられます。しかし、buffer-request
ハンドラーが追加されると、ワーカースレッドに割り当てする前に、ハンドラーは IO スレッドを使用してブロックせずにバッファー処理できる量のデータを読み取ろうとします。
以下の管理 CLI コマンドを使用して buffer-request
ハンドラーを設定できます。
/subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)") /subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add
処理できるバッファーリクエストのサイズには制限があります。この制限は、以下の式のとおり、バッファーサイズとバッファー合計数の組み合わせで決定されます。
Total_size = num_buffers × buffer_size
この式の説明は次のとおりです。
-
Total_size
は、リクエストがワーカースレッドに送信される前にバッファー処理されるデータのサイズになります。 -
num_buffers
はバッファーの数になります。バッファーの数は、ハンドラーのbuffers
パラメーターによって設定されます。 -
buffer_size
は各バッファーのサイズになります。バッファーサイズはio
サブシステムで設定され、デフォルトではリクエストごとに 16KB になります。
メモリー不足になる可能性があるため、サイズが大きすぎるバッファーリクエストは設定しないでください。
16.8. デフォルトの Welcome Web アプリケーションの設定
JBoss EAP には、デフォルトではポート 8080
のルートコンテキストで表示されるデフォルトの Welcome
アプリケーションが含まれます。
Undertow には、Welcome コンテンツに対応するデフォルトのサーバーが事前設定されています。
デフォルトの Undertow サブシステムの設定
<subsystem xmlns="urn:jboss:domain:undertow:4.0"> ... <server name="default-server"> <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/> <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host> </server> ... <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> ... </subsystem>
デフォルトのサーバー default-server
にはデフォルトのホスト default-host
が設定されています。デフォルトのホストは、welcome-content
ファイルハンドラーで <location>
要素を使用して、サーバーのルートへのリクエストを処理するよう設定されています。welcome-content
ハンドラーは path
プロパティーに指定された場所でコンテンツを処理します。
このデフォルトの Welcome
アプリケーションは、独自の Web アプリケーションで置き換えることができます。これは、以下の 2 つのいずれかの方法で設定できます。
Welcome コンテンツを無効にすることもできます。
welcome-content ファイルハンドラーの変更
新しいデプロイメントを参照する、既存の
welcome-content
ファイルハンドラーのパスを変更します。/subsystem=undertow/configuration=handler/file=welcome-content:write-attribute(name=path,value="/path/to/content")
注記または、サーバーのルートにより使用される異なるファイルハンドラーを作成することもできます。
/subsystem=undertow/configuration=handler/file=NEW_FILE_HANDLER:add(path="/path/to/content") /subsystem=undertow/server=default-server/host=default-host/location=\/:write-attribute(name=handler,value=NEW_FILE_HANDLER)
変更を反映するためにサーバーをリロードします。
reload
default-web-module の変更
デプロイされた Web アプリケーションをサーバーのルートにマップします。
/subsystem=undertow/server=default-server/host=default-host:write-attribute(name=default-web-module,value=hello.war)
変更を反映するためにサーバーをリロードします。
reload
デフォルトの Welcome Web アプリケーションの無効化
default-host
のlocation
エントリー (/
) を削除して welcome アプリケーションを無効にします。/subsystem=undertow/server=default-server/host=default-host/location=\/:remove
変更を反映するためにサーバーをリロードします。
reload
16.9. HTTPS の設定
Web アプリケーションの HTTPS 設定に関する詳細は、『How to Configure Server Security』の「Configure One-way and Two-way SSL/TLS for Applications」を参照してください。
JBoss EAP 管理インターフェースと使用するための HTTPS 設定に関する詳細は、『How to Configure Server Security』の「How to Secure the Management Interfaces」を参照してください。
16.10. HTTP セッションタイムアウトの設定
HTTP セッションタイムアウトは、HTTP セッションの無効を宣言するために必要な非アクティブな期間を定義します。たとえば、HTTP セッションを作成する JBoss EAP にデプロイされたアプリケーションにユーザーがアクセスしたとします。HTTP セッションタイムアウト後に同じユーザーが同じアプリケーションに再度アクセスしようとすると、元の HTTP セッションは無効化され、ユーザーは新しい HTTP セッションの作成を強制されます。これにより、永続化されなかったデータを損失したり、ユーザーを再認証する必要がある場合があります。
HTTP セッションタイムアウトは、アプリケーションの web.xml
ファイルに設定されますが、デフォルトの HTTP セッションタイムアウトは JBoss EAP 内で指定できます。サーバーのタイムアウト値はデプロイされたすべてのアプリケーションに適用されますが、アプリケーションの web.xml
はサーバーの値をオーバーライドします。
サーバーの値は、undertow
サブシステムの servlet-container
セクションにある default-session-timeout
プロパティーに指定されます。default-session-timeout
の値は分単位で指定され、デフォルトは 30
です。
デフォルトのセッションタイムアウトの設定
default-session-timeout
を設定するには、以下を指定します。
/subsystem=undertow/servlet-container=default:write-attribute(name=default-session-timeout, value=60)
reload
HTTP セッションタイムアウトを変更する場合は、影響を受けるすべての JBoss EAP インスタンスを再起動する必要があります。この操作が行われるまで元の HTTP セッションタイムアウト値が適用されます。
16.11. HTTP のみのセッション管理クッキーの設定
セッション管理クッキーは、JavaScript などの HTTP API および非 HTTP API の両方によってアクセスされます。JBoss EAP は HttpOnly
ヘッダーを Set-Cookie
応答ヘッダーの一部としてクライアント (通常はブラウザー) に送信します。サポートされるブラウザーでこのヘッダーを有効にすると、非 HTTP API を経由してセッション管理クッキーへアクセスしないようにブラウザーに通知します。セッション管理クッキーを HTTP API のみに制限すると、クロスサイトスクリプティングの攻撃よるセッションクッキーの窃盗のリスクを軽減することができます。この動作を有効にするには、http-only
属性を true
に設定する必要があります。
HttpOnly
ヘッダーを使用しても、単にブラウザーに通知を行うだけで、クロスサイトスクリプティングによる攻撃を実際に防ぐわけではありません。この動作を反映するには、ブラウザーも HttpOnly
をサポートしている必要があります。
HttpOnly
属性を使用すると制限がセッション管理クッキーのみに適用され、その他のブラウザークッキーには適用されません。
http-only
属性は undertow
サブシステムの 2 カ所で設定されます。
- セッションクッキー設定としてサーブレットコンテナーで設定
- 単一のサインオンプロパティーとしてサーバーのホストセクションで設定
host-only
をサーブレットコンテナーセッションクッキーに設定
host-only
プロパティーをサーブレットコンテナーセッションクッキーに設定するには、以下を指定します。
/subsystem=undertow/servlet-container=default/setting=session-cookie:add
/subsystem=undertow/servlet-container=default/setting=session-cookie:write-attribute(name=http-only,value=true)
reload
host-only
をホストシングルサインオンに設定
host-only
プロパティーをホストシングルサインオンに設定するには、以下を指定します。
/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:add
/subsystem=undertow/server=default-server/host=default-host/setting=single-sign-on:write-attribute(name=http-only,value=true)
reload
16.12. HTTP/2 の設定
Undertow では、HTTP/2 標準を使用できます。この標準は、ヘッダーの圧縮と多くのストリームの多重化を同じ TCP 接続で行い、待ち時間を削減します。さらに、リクエストの前にサーバーがリソースをクライアントにプッシュできる機能も提供するため、ページのロードがより速くなります。
HTTP/2 を使用するよう Undertow を設定するには、enable-http2
属性を true
に設定し、HTTP/2 を使用するよう Undertow の HTTPS リスナーを有効にします。
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=enable-http2,value=true)
HTTPS リスナーの情報や、Web アプリケーションで HTTPS を使用するよう Undertow を設定する方法については、『How to Configure Server Security』の「Configure One-way and Two-way SSL/TLS for Applications」を参照してください。
セキュアな TLS 接続上で HTTP/2 を使用する場合、ALPN TLS プロトコル拡張をサポートする TLS スタックが必要になります。Java 8 では ALPN を使用できないため、その実装は Java 内部の依存関係とともに直接 JBoss EAP 7.1 に導入されました。そのため、この ALPN 実装は Oracle と OpenJDK のみで動作し、IMB Java では動作しません。また、Java の更新によってはこの ALPN が破損する可能性のある若干のリスクが存在します。Red Hat は、OpenSSL プロバイダーの ALPN TLS プロトコル拡張サポートと、ALPN 機能を実装する OpenSSL ライブラリーを利用することを強く推奨します。サポートされる OpenSSL ライブラリーは、インストールおよび設定された JBoss Core Services のライブラリーです。
OpenSSL のインストール手順は、「JBoss Core Services からの OpenSSL のインストール」を参照してください。
JBoss EAP が OpenSSL を使用するよう設定する方法は複数あります。
elytron
サブシステムを再設定し、OpenSSL の優先度を上げて、OpenSSL がデフォルトですべての場合で使用されるようにすることができます。注記OpenSSL は
elytron
サブシステムにインストールされていますが、デフォルトの TLS プロバイダーではありません。/subsystem=elytron:write-attribute(name=initial-providers, value=combined-providers) /subsystem=elytron:undefine-attribute(name=final-providers) reload
elytron
サブシステムでは、OpenSSL プロバイダーはssl-context
リソースでも指定できます。これにより、デフォルトの優先度を使用せずに、OpenSSL プロトコルを状況に応じて選択できます。ssl-context
リソースを作成し、Elytron ベースの SSL/TLS 設定で OpenSSL ライブラリーを使用するには、以下のコマンドを使用します。/subsystem=elytron/server-ssl-context=httpsSSC:add(key-manager=localhost-manager, trust-manager=ca-manager, provider-name=openssl) reload
レガシーの
security
サブシステムの SSL/TLS 設定で OpenSSL ライブラリーを使用するには、以下のコマンドを使用します。/core-service=management/security-realm=ApplicationRealm/server-identity=ssl:write-attribute(name=protocol,value=openssl.TLSv1.2) reload
使用可能な OpenSSL プロトコルは次のとおりです。
- openssl.TLS
- openssl.TLSv1
- openssl.TLSv1.1
- openssl.TLSv1.2
JBoss EAP は自動的にシステム上の OpenSSL ライブラリーの検索を行い、それを使用します。JBoss EAP の起動中に org.wildfly.openssl.path
プロパティーを使用すると、カスタム OpenSSL ライブラリーの場所を指定することもできます。JBoss Core Services によって提供される OpenSSL ライブラリーのバージョン 1.0.2 以上のみがサポートされます。HP-UX 上の JBoss EAP で OpenSSL を使用することはサポートされません。
OpenSSL が適切にロードされると、JBoss EAP の起動中に以下と似たメッセージが server.log
に出力されます。
15:37:59,814 INFO [org.wildfly.openssl.SSL] (MSC service thread 1-7) WFOPENSSL0002 OpenSSL Version OpenSSL 1.0.2k-fips 23 Mar 2017
HTTP/2 は、HTTP/2 標準をサポートするブラウザーでのみ動作します。
Solaris 10 プラットフォーム上の JBoss EAP 7.1 で OpenSSL
ベースのセキュリティーを使用する場合、libgcc
ライブラリーの正しい場所を見つけるために、JBoss EAP の LD_LIBRARY_PATH
環境変数を設定する必要があります。Red Hat は、64 ビット版の wildfly-openssl
ライブラリーのみをSolaris に提供するため、/usr/sfw/lib/64
を LD_LIBRARY_PATH
に追加して、OpenSSL
の初期化中および JBoss EAP のブート中に適切なシステムライブラリーが使用されるようにする必要があります。
この変更は Solaris 10 プラットフォームのみに必要です。 Solaris 11 は変更しなくても動作します。
elytron
サブシステムで HTTP/2 を使用するには、Undertow の https-listener
にある設定済みの ssl-context
が変更可能として設定される必要があります。これには、適切な server-ssl-context
の wrap
属性を false
に設定します。デフォルトでは wrap
属性は false
に設定されます。これは、ALPN に関する ssl-context
の変更を行うために Undertow で必要になります。提供された ssl-context
が書き込み可能でない場合、ALPN は使用できず、接続は HTTP/1.1 にフォールバックします。
最新のブラウザーは、h2
と呼ばれるセキュアな TLS 接続上の HTTP/2 を強制します。h2c
と呼ばれるプレーン HTTP 上の HTTP/2 はサポートしないことがあります。h2c
で HTTP/2 を使用するよう JBoss EAP を設定することも可能で、HTTPS を使用せずに HTTP のアップグレードでプレーン HTTP のみを使用します。この場合、Undertow の HTTP リスナーで HTTP/2 を有効にします。
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=enable-http2,value=true)
HTTP/2 が使用されていることを検証
Undertow が HTTP/2 を使用していることを検証するには、Undertow からのヘッダーを確認する必要があります。https を使用して JBoss EAP インスタンスに移動し (例: https://localhost:8443)、ブラウザーの開発者ツールを使用してヘッダーを確認します。 Google Chrome などの一部のブラウザーは、HTTP/2 の使用時には :path
、:authority
、:method
、:scheme
などの HTTP/2 擬似ヘッダーを表示します。Firefox や Safari などの他のブラウザーは、ヘッダーの状態またはバージョンを HTTP/2.0
と表示します。
16.13. RequestDumping ハンドラーの設定
RequestDumping
ハンドラーである io.undertow.server.handlers.RequestDumpingHandler
は、JBoss EAP 内で Undertow によって処理されるリクエストとその応答オブジェクトの詳細をログに記録します。
このハンドラーはデバッグに便利ですが、機密情報がログに記録される可能性があります。この点に留意してこのハンドラーを有効にしてください。
RequestDumping
ハンドラーは、JBoss EAP 6 の RequestDumperValve
の代わりに使用されます。
RequestDumping
ハンドラーは、JBoss EAP のサーバーレベルまたは個別のアプリケーション内のいずれかで設定できます。
16.13.1. サーバーでの RequestDumping ハンドラーの設定
RequestDumping
ハンドラーは式フィルターとして設定する必要があります。RequestDumping
ハンドラーを式フィルターとして設定するには、以下を行う必要があります。
RequestDumping
ハンドラーで新しい式フィルターを作成する
/subsystem=undertow/configuration=filter/expression-filter=requestDumperExpression:add(expression="dump-request")
Undertow Web サーバーで式フィルターを有効にする
/subsystem=undertow/server=default-server/host=default-host/filter-ref=requestDumperExpression:add
このように RequestDumping
ハンドラーを式フィルターとして有効にすると、Undertow Web サーバーによって処理されるすべてのリクエストおよびそれらの応答がログに記録されます。
特定 URL に対して RequestDumping ハンドラーを設定する
すべてのリクエストをログに記録する他に、特定の URL のリクエストやそれらの応答のみをログに記録するために式フィルターを使用することもできます。これには、path
、path-prefix
、path-suffix
などの述語を式に使用します。たとえば、/myApplication/test
へのリクエストとそれらの応答をすべてログに記録するには、式フィルターの作成時に式 "dump-request"
の代わりに "path(/myApplication/test) -> dump-request"
を使用します。これにより、/myApplication/test
に完全一致するパスを持つリクエストのみが RequestDumping
ハンドラーに送られます。
16.13.2. アプリケーション内での RequestDumping ハンドラーの設定
サーバーで RequestDumping
ハンドラーを設定する他に、個別のアプリケーション内で設定することもできます。これにより、ハンドラーの範囲がそのアプリケーションのみに制限されます。 RequestDumping
ハンドラーは WEB-INF/undertow-handlers.conf
で設定する必要があります。
指定のアプリケーションのすべてのリクエストとそれらの応答をログに記録するよう WEB-INF/undertow-handlers.conf
で RequestDumping
ハンドラーを設定するには、以下の式を WEB-INF/undertow-handlers.conf
に追加します。
例: WEB-INF/undertow-handlers.conf
dump-request
指定のアプリケーション内での特定 URL のリクエストやそれらの応答のみをログに記録するよう、WEB-INF/undertow-handlers.conf
で RequestDumping
ハンドラーを設定するには、path
、path-prefix
、path-suffix
などの述語を式に使用します。たとえば、アプリケーションの test
へのリクエストとそれらの応答をすべてログに記録するには、path
述語が含まれる以下の式を使用できます。
例: WEB-INF/undertow-handlers.conf
path(/test) -> dump-request
path
、path-prefix
、path-suffix
などの述語をアプリケーションの WEB-INF/undertow-handlers.conf
に定義された式で使用する場合、使用する値はアプリケーションのコンテキストルートからの相対値になります。たとえば、アプリケーションのコンテキストルートは myApplication
で、式 path(/test) -> dump-request
が WEB-INF/undertow-handlers.conf
に設定されている場合、/myApplication/test
へのリクエストとそれらの応答のみがログに記録されます。
16.14. Undertow サブシステムの調整
undertow
サブシステムのパフォーマンスを最適化するための情報は、『Performance Tuning Guide』の「Undertow Subsystem Tuning」を参照してください。