8.7.1 静的コンテンツとWebアプリケーションの配置を切り分ける
HTMLファイルや画像ファイルなど,クライアントからの要求に対する応答に使用するファイルのうち,リクエスト内容に影響されないで常に同じ内容になるコンテンツを,静的コンテンツといいます。一方,サーブレットやJSPのように,クライアントからの要求に応じて動的に生成されるコンテンツを動的コンテンツといいます。
ここでは,静的コンテンツを動的コンテンツであるWebアプリケーションと切り分けて配置することで,パフォーマンスの向上を図る方法について説明します。
なお,それぞれの設定例では,Webブラウザに,次の図に示すようなフレームやインラインイメージで構成されるHTMLページを表示する場合の例を基に説明します。
この構成の場合,次のファイルは動的に生成されない静的コンテンツです。
-
スタイルシート(CSSファイルなど)
-
インラインイメージ(画像ファイル)
-
フレームなどを定義したHTMLファイル
静的コンテンツをWebアプリケーションに組み込んで扱うと,Webコンテナで処理する必要がない静的コンテンツをやり取りする場合でもWebサーバとWebコンテナ間で常にアクセスが発生します。特に画像ファイルなどの場合は,データサイズが大きいため,処理時間が掛かります。
静的コンテンツはWebアプリケーションと分離して,Webサーバ上に配置することをお勧めします。これによって,ネットワークアクセスの回数およびやり取りするデータのサイズを減らし,パフォーマンスの向上が図れます。静的コンテンツとWebアプリケーションの処理のイメージを次の図に示します。
Webアプリケーションと分離した静的コンテンツの配置方法について説明します。なお,ここでは,図8-16で示した構成のHTMLページを例として説明します。
図8-16の場合,次のような静的コンテンツをWebサーバに配置することで,パフォーマンスの向上が図れます。
- Webサーバに配置するコンテンツ
-
-
スタイルシート(CSSファイルなど)
-
インラインイメージ(画像ファイル)
-
フレームなどを定義したHTMLファイル
-
配置の例を次の図に示します。
このマッピングをするためには,マッピング定義を次のように記述します。詳細は,マニュアル「HTTP Server」の「6.2.6(17) ProxyPass」ディレクティブを参照してください。
- リバースプロキシの定義
ProxyPass /APP/ http://myj2eeserver/APP/
- 注意事項
-
Webサーバ連携の場合,Webサーバには,Webアプリケーションのファイルをすべて配置するのではなく,クライアントから直接アクセスされる静的コンテンツだけを配置するようにしてください。
リバースプロキシでは,リクエストの拡張子やパス情報を正しく読み取ることができない場合に,動的コンテンツに対するリクエストを誤って静的コンテンツに対するリクエストと判断することがあります。この場合,リバースプロキシはJ2EEサーバに処理を振り分けないで,Webサーバ上のコンテンツをそのままクライアントに送信してしまいます。Webサーバ上にサーブレットやJSPなどの動的コンテンツを配置している場合に,動的コンテンツに対するリクエストが静的コンテンツへのリクエストとして扱われてしまうと,クラスファイルの実体やJSPなどのコンテンツのソースがレスポンスとしてリクエスト元のクライアントに送信されてしまうおそれがあります。