第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 を有効にします。

  1. サーバー設定のコネクター 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>
  2. Red Hat JBoss Web Server を root ユーザーとして再起動し、変更した設定を適用します。

    1. SysV (Red Hat Enterprise Linux 6) ユーザーの場合:

      # service jws5-tomcat restart
    2. systemd (Red Hat Enterprise Linux 7) ユーザーの場合:

      # systemctl restart jws5-tomcat.service
    3. startup.sh を使用して Red Hat JBoss Web Server を実行している Red Hat Enterprise Linux ユーザーの場合:

      # JWS_HOME/sbin/shudown.sh
      # JWS_HOME/sbin/startup.sh
    4. 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 など) で、ポート番号は設定によって異なります。

その他のリソース