5.7. HTTP/2使用手順

ここでは HTTP/2を使用する場合の、サーバ設定の例を示します。

5.7.1. Tomcat Native Libraryのインストール

はじめに

TomcatでHTTP/2を使用する場合、Apache Tomcat Native Libraryの導入が必要です。

ソースコードのビルドが必要となるため、gccをインストールしておきます。

# yum install gcc

また関連ライブラリ(APR/OpenSSL)をインストールします。

# yum install apr-devel openssl-devel

Tomcat Nativeのビルド

Tomcat Nativeのソースは、Tomcatインストール時に、"${CATALINA_HOME}/bin/tomcat-native.tar.gz" に格納されます。

Apache Tomcat Native Library から最新のソースをダウンロードすることもできます。

上記のファイルを解凍し、ビルド・インストールを行います。 パスは環境に合わせて指定してください。

# tar zxvf tomcat-native.tar.gz
# cd ./tomcat-native-xx.xx.xx-src/native/
# ./configure --with-java-home=$JAVA_HOME #JDKのインストールディレクトリ \
              --prefix=$CATALINA_HOME     #Tomcatのインストールディレクトリ
# make && make install

注釈

ビルド環境に依存するため、エラー発生時はエラーメッセージを参考に、 適切なパスを指定してください。

configure実行時に、APR/OpenSSLを自動的に検出できない場合、以下オプションを使用して直接指定することができます。

  • --with-apr=xxxxx
  • --with-ssl=xxxxx

詳細は、Apache Tomcat Native Library を参照して下さい。

インストール完了後、$CATALINA_HOME/lib/ にビルドしたファイル(libtcnative-*) が コピーされていることを確認してください。

5.7.2. Tomcat Connectorの設定

HTTP/2を使用する際は、TomcatのConnectorに設定を追加する必要があります。 一般的に、httpsのConnectorを使用します。

https使用時の設定に加え、以下の2点を変更します。

  • protocolに、"Http11AprProtocol" を指定する
  • UpgradeProtocol にHttp2Protocolを指定する

以下はConnectorの設定例です。

各要素は、使用する環境に応じて設定を行ってください。 パラメータ、設定方法の詳細は、 Apache Tomcat 10 Configuration Reference を参照して下さい。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
       maxThreads="500"
       SSLEnabled="true"
       scheme="https"
       secure="true"
       defaultSSLHostConfigName="localhost">
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
    <SSLHostConfig hostName="localhost"
               caCertificateFile="${catalina.base}/conf/certs/cacert.pem"
               certificateVerificationDepth="5"
               protocols="+TLSv1+TLSv1.1+TLSv1.2">
        <Certificate certificateKeyFile="${catalina.base}/conf/certs/server_localhost.key"
                   certificateFile="${catalina.base}/conf/certs/server_localhost.pem"
                   type="RSA"/>
    </SSLHostConfig>
</Connector>

ヒント

HTTP/2とHTTP/1.1を比較の上、採用を検討して下さい。 用途や環境により、パフォーマンスに大きな差が発生します。

一般的に、HTTP/2は以下のような条件に適しています。

  • サーバ・クライアント間のターンアラウンドタイムが大きい
  • 単一クライアントから、連続して多数のリクエストを行う
  • サーバのTCPポート数に制限がある