4.17.2 mod_proxy_http2モジュールの組み込み
リバースプロキシ機能でバックエンドサーバとHTTP/2プロトコルを使用するためには,mod_proxyモジュール,mod_proxy_http2モジュールの組み込みが必要です。モジュールを組み込むには,コンフィグファイル(httpsd.conf)に次に示すディレクティブを指定します。
-
UNIX版
LoadModule proxy_module libexec/mod_proxy.so LoadModule proxy_http2_module libexec/mod_proxy_http2.so
-
Windows版
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http2_module modules/mod_proxy_http2.so
リバースプロキシ機能を使ってHTTP/2プロトコルでバックエンドサーバにリクエストを転送する設定例を次に示します。
ここでは各アドレスを次のように仮定しています。
-
リバースプロキシ:www.example.com
-
バックエンドサーバ:backend.example.com
ProxyPass /news/ h2c://backend.example.com/ ProxyPassReverse /news/ http://backend.example.com/
このようにProxyPass ディレクティブを設定すると,クライアントからの"http://www.example.com/news/oct-2001"というリクエストは"http://backend.example.com/oct-2001"というリクエストに変更されます。変更されたリクエストはHTTP/2プロトコルを使用して,バックエンドサーバに送信されます。
バックエンドサーバでリダイレクトが指示された場合,バックエンドサーバからのレスポンスのLocationヘッダにバックエンドサーバのアドレスが記載されます。これをそのままクライアントに応答すると,クライアントはリダイレクトをリバースプロキシではなく,直接バックエンドサーバにリクエストします。そこで,ProxyPassReverseディレクティブを上記のように指定することで,リダイレクトリクエストもリバースプロキシを通るリクエストになります。
リバースプロキシ機能を使用してバックエンドサーバに転送する場合は,バックエンドサーバ側でもHTTP/2リクエストを受け付けるための設定が必要です。バックエンドサーバにCosminexusのNIO HTTPサーバを使用する場合には,NIO HTTPサーバのwebserver.http2.enabledキーにtrueの指定が必要です。詳細はマニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。