第5章 Red Hat JBoss Web Server の HTTP/2 の有効化
ハイパーテキスト転送プロトコルは、インターネットを介して (サーバーやブラウザーなどの) アプリケーション間でデータを送信する標準的な方法です。
HTTP/2 は、以下のような機能強化を提供し、HTTP/1.1 よりも改良されています。
- ヘッダー圧縮 - 暗黙的な情報を省略して送信されるヘッダーのサイズを縮小します。
- 1 つの接続に対する複数の要求および応答。バイナリーフレーミングを使用して応答メッセージを分割します。これは、テキストのフレーミングとは異なります。
Red Hat JBoss Web Server での HTTP/2 の使用:
-
TLS (
h2
) での暗号化された接続は サポートされます。 -
TCP (
h2c
) での暗号化されていない接続はサポートされません。
要件
- root ユーザーアクセス (Red Hat Enterprise Linux システム)
- Red Hat JBoss Web Server 5.0 以降
以下のオペレーティングシステムのネイティブライブラリーです(利用可能な場合は
jws-5.3.0-application-server-<platform>-<architecture>.zip
によって提供)。RHEL-8 ユーザーが JSSE+OpenSSL または APR を実行する必要がある場合、Tomcat-Native が正常に機能するよう使用する必要があります。Tomcat-Native のファイルはネイティブアーカイブディレクトリーにあります。OpenSSL および APR をインストールするには、以下のコマンドを実行します。
# yum install openssl
# yum install apr
SSL が有効になっている HTTP/2 プロトコルをサポートするコネクター。JBoss Web Server 5.3 では、HTTP/2 プロトコルがサポートされるコネクターは次のとおりです。
- APR ネイティブコネクター (APR)
- JSSE + OpenSSL (JSSE) のある NIO コネクター
- JSSE + OpenSSL (JSSE) のある NIO2 コネクター
手順
コネクターの HTTP/2 を有効にします。
サーバー設定のコネクター
JWS_HOME/tomcat/conf/server.xml
に、HTTP/2 アップグレードプロトコル (<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
) を追加します。例を以下に示します。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeystoreFile="/KeyStore.jks" certificateKeystorePassword="changeit" type="RSA" /> </SSLHostConfig> </Connector>
server.xml
には、HTTP/2 へのアップグレードプロトコルを使用する APR プロトコルのコネクター定義例が含まれています。<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" certificateChainFile="conf/localhost-rsa-chain.pem" type="RSA" /> </SSLHostConfig> </Connector>
Red Hat JBoss Web Server を root ユーザーとして再起動し、変更した設定を適用します。
SysV (Red Hat Enterprise Linux 6) ユーザーの場合:
# service jws5-tomcat restart
systemd (Red Hat Enterprise Linux 7) ユーザーの場合:
# systemctl restart jws5-tomcat.service
startup.sh
を使用して Red Hat JBoss Web Server を実行している Red Hat Enterprise Linux ユーザーの場合:# JWS_HOME/sbin/shudown.sh # JWS_HOME/sbin/startup.sh
Windows Server ユーザーの場合:
# net restart tomcat9
次のステップ
Red Hat JBoss Web Server ログを確認して、または curl
コマンドを使用して、HTTP/2 が有効になっていることを確認します。
コンソール出力ログ (
JWS_HOME/tomcat/logs/catalina.out
) を確認して、コネクターが [h2] へのネゴシエーションをサポートするよう設定されていることを確認してください。$ cat JWS_HOME/tomcat/logs/catalina.out | grep 'h2' 06-Apr-2018 04:49:26.201 INFO [main] org.apache.coyote.http11.AbstractHttp11Protocol.configureUpgradeProtocol The ["https-openssl-apr-8443"] connector has been configured to support negotiation to [h2] via ALPN
または、
curl
(HTTP2
をサポートするcurl
のバージョン) を使用して検証します。注記HTTP/2 サポートについて
curl
を確認するには、以下を実行します。$ curl -V curl 7.55.1 (x86_64-redhat-linux-gnu) ... Release-Date: 2017-08-14 Protocols: dict file ftp ftps gopher http https ... Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy Metalink PSL
たとえば、HTTP/2 プロトコルが非アクティブである場合:
$ curl -I http://<JBoss_Web_Server>:8080/ HTTP/1.1 200 ...
ただし、HTTP/2 プロトコルがアクティブである場合、
curl
は以下を返します。$ curl -I https://<JBoss_Web_Server>:8443/ HTTP/2 200 ...
ここで、<JBoss_Web_Server> は変更したコネクターの URI (
example.com
など) で、ポート番号は設定によって異なります。
その他のリソース
- HTTP/2 の使用に関する詳細は、『Apache Tomcat 9 Configuration Reference: The HTTP Connector - HTTP/2 Support』 を参照してください。
- HTTP/2 アップグレードプロトコルおよびサポートされる属性の詳細は、『 Apache Tomcat 9 Configuration Reference: The HTTP2 Upgrade Protocol 』を参照してください。
- HTTP/2 向けに提案されるインターネット標準: IETF: RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)