HTMLファイルや画像ファイルなど,クライアントからの要求に対する応答に使用するファイルのうち,リクエスト内容に影響されないで常に同じ内容になるコンテンツを,静的コンテンツといいます。一方,サーブレットやJSPのように,クライアントからの要求に応じて動的に生成されるコンテンツを動的コンテンツといいます。
ここでは,静的コンテンツを動的コンテンツであるWebアプリケーションと切り分けて配置することで,パフォーマンスの向上を図る方法について説明します。設定方法は,Webサーバ連携の場合とインプロセスHTTPサーバを使用する場合とで異なります。
なお,それぞれの設定例では,Webブラウザに,次の図に示すようなフレームやインラインイメージで構成されるHTMLページを表示する場合の例を基に説明します。
図8-16 静的コンテンツと動的コンテンツで構成されるHTMLページの例
この構成の場合,次のファイルは動的に生成されない静的コンテンツです。
静的コンテンツをWebアプリケーションに組み込んで扱うと,Webコンテナで処理する必要がない静的コンテンツをやり取りする場合でもリダイレクタとWebコンテナ間で常にアクセスが発生します。特に画像ファイルなどの場合は,データサイズが大きいため,処理時間が掛かります。
静的コンテンツはWebアプリケーションと分離して,Webサーバ上に配置することをお勧めします。これによって,ネットワークアクセスの回数およびやり取りするデータのサイズを減らし,パフォーマンスの向上が図れます。静的コンテンツとWebアプリケーションの処理のイメージを次の図に示します。
図8-17 静的コンテンツとWebアプリケーションの処理のイメージ
Webアプリケーションと分離した静的コンテンツの配置方法について説明します。なお,ここでは,図8-16で示した構成のHTMLページを例として説明します。
図8-16の場合,次のような静的コンテンツをWebサーバに配置することで,パフォーマンスの向上が図れます。
配置の例を次の図に示します。
図8-18 静的コンテンツをWebサーバに配置する例(Webサーバ連携の場合)
このマッピングをするためには,マッピング定義を次のように記述します。詳細は,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「9. Webサーバ連携で使用するファイル」を参照してください。
#
JkMount /APP/* worker1
# JkMount /* worker1
# を使用するとWebサーバ上の/images/などは参照できません。
#
/APP/*=worker1
# /*=worker1
# を使用するとWebサーバ上の/images/などは参照できません。
インプロセスHTTPサーバを使用する場合も,静的コンテンツのように常に同じ内容をクライアントに渡すときには,静的コンテンツをインプロセスHTTPサーバおよびWebコンテナとは別のWebサーバで処理した方が,パフォーマンスが向上することがあります。特に,画像ファイルなどファイルサイズが大きいデータを大量に扱う場合は,Webアプリケーションに組み込むのではなく,静的コンテンツの処理専用のWebサーバを配置して扱うことをお勧めします。
静的コンテンツをWebアプリケーションから切り出して扱うためには,フロントにリバースプロキシサーバや負荷分散機を配置する構成が考えられます。この場合,リバースプロキシサーバや負荷分散機によって,処理を次のように振り分けます。
振り分け処理のイメージを次の図に示します。次の図は,リバースプロキシサーバによって処理を振り分けている例です。
図8-19 リバースプロキシサーバによる動的コンテンツと静的コンテンツの振り分けイメージ
Webアプリケーションと分離した静的コンテンツの配置方法について説明します。なお,ここでは,図8-16で示した構成のHTMLページを例として説明します。
図8-16の場合,次のような静的コンテンツをWebサーバに配置することで,パフォーマンスの向上が図れます。
配置の例を次の図に示します。
図8-20 静的コンテンツをWebサーバに配置する例(インプロセスHTTPサーバの場合)
この振り分けをするためには,Hitachi Web Serverのコンフィグファイル(httpsd.conf)のProxyPassディレクティブに,次のようにリバースプロキシの定義を記述します。
詳細は,マニュアル「Hitachi Web Server」を参照してください。
ProxyPass /APP/ http://inprocweb/APP/
ProxyPass /images/ http://websvr/images/
ProxyPass /css/ http://websvr/css/