Webサーバへのアクセスの増加や,業務アプリケーションなどの影響でWebサーバの負荷が高くなった場合に,Webサイトにアクセスするユーザ数を制限するなどして,Webサービスの処理効率を維持する機能を流量制限機能といいます。
HTTP Serverにmod_hws_qosモジュールを組み込めば,流量制限機能を使用できます。流量制限機能を使用すると,次に示すことができます。なお,以降の記述で「サーバプロセス数」は,Windows版の場合「サーバスレッド数」のことです。
十分なWebサービスを提供するには,同時にアクセスするユーザ数を満たすだけのサーバプロセス数が必要です。Webサーバが1台で不十分なら,複数台用意し,負荷分散機でアクセスを分散させるなどしてWebサービスを保証できるように運用設計してください。
このようにWebサービスの資源を用意しても,一時的に過負荷状態が発生する場合に備えて,流量制限機能を使用してください。mod_hws_qosによる流量制限機能の概要を次に示します。
図4-12 mod_hws_qosによる流量制限機能の概要
流量制限機能を使用するためにはmod_hws_qosモジュールの組み込みが必要です。mod_hws_qosモジュールを組み込むには,コンフィグファイル(httpsd.conf)に次に示すディレクティブを指定します。
LoadModule hws_qos libexec/mod_hws_qos.so |
LoadModule hws_qos modules/mod_hws_qos.so |
流量制限機能を使用するための,各ディレクティブの設定例を次に示します。
次のように指定すると,リクエスト処理中のサーバスレッド数が13の場合には,新たなリクエスト要求はステータスコード503で拒否されます。
MaxClients 15
QOSRejectionServers 2
QOSCookieServers 0
ThreadsPerChild 15
QOSRejectionServers 2
QOSCookieServers 0
クッキーを使用したセション管理には,HTTP Serverで作成したクッキーを使用するHWS作成モードと,HTTP Server以外の外部モジュールなどで作成されたクッキーを使用するユーザ作成モードがあります。QOSCookieNameディレクティブを用いて,どちらの方式を使用するかを選択します。QOSCookieNameディレクティブの詳細については,「6.2 ディレクティブの詳細」を参照してください。
次のように指定すると,リクエスト処理中のサーバスレッド数が10の場合,クッキーを持っていない新しいセションのリクエスト要求は拒否されますが,クッキーを持った継続セションは処理されます。リクエスト処理中のサーバスレッド数が13の場合は,クッキーを持っているかどうかに関係なく拒否されます。この例ではHWS作成モードで動作します。
MaxClients 15
QOSRejectionServers 2
QOSCookieServers 5
ThreadsPerChild 15
QOSRejectionServers 2
QOSCookieServers 5
流量制限機能によってリクエスト処理を拒否する場合には,ステータスコード503でレスポンスメッセージを返送しますが,次のように指定すると,ほかのWebサーバへリダイレクトさせることができます。/index.htmlへのリクエスト要求が流量制限機能によって拒否された場合には,www1.hitachi.co.jpのWebサーバのindex.htmlをレスポンスヘッダに設定し,ステータスコード302で返送されます。
QOSRedirect /index.html http://www1.hitachi.co.jp/index.html
次のように指定すると,拒否されたリクエストに対するレスポンスは,ステータスコード503で,レスポンスメッセージは,htdocs/busy.htmlの内容が返送されます。
QOSResponse file "text/html; charset=ISO-8859-1" htdocs/busy.html
Set-Cookie: NAME=VALUE; expires=DATE; path=/; domain=DOMAIN_NAME; secure |
流量制限機能によって拒否された場合,レスポンスメッセージをキャッシュできなくするためのヘッダであるExpiresを,レスポンスヘッダに含めます。これは,サーバ側でリクエスト処理が可能であっても,プロキシまたはブラウザでキャッシュされると,キャッシュされたメッセージがブラウザに表示されて,サーバにリクエストしない場合があるためです。また,拒否メッセージ送信後はサーバ側からコネクションを切断します。
そのほかのレスポンスヘッダは,次のように設定されます。Content-Typeには,AddDefaultCharsetで指定した文字セットが付加されます。