Hitachi Web Server
Webサーバへのアクセスの増加や,業務アプリケーションなどの影響でWebサーバの負荷が高くなった場合に,Webサイトにアクセスするユーザ数を制限するなどして,Webサービスの処理効率を維持する機能を流量制限機能といいます。
Hitachi Web Serverにmod_hws_qosモジュールを組み込めば,流量制限機能を使用できます。流量制限機能を使用すると,次に示すことができます。なお,以降の記述で「サーバプロセス数」は,Windows版の場合「サーバスレッド数」のことです。
- リクエスト処理を実施するサーバプロセス数を制限すれば,Webサイトに同時にアクセスするユーザ数を制限できます。高負荷時には,制限値を超えたリクエストに対してすぐに拒否レスポンスを返したり,ほかのWebサーバへリダイレクトさせたりすれば,レスポンスタイムを維持できます。
- クッキーを使用したセション管理によって,高負荷時,新しいセションを拒否し,既にアクセスしているユーザのレスポンスタイムを維持できます。
十分なWebサービスを提供するには,同時にアクセスするユーザ数を満たすだけのサーバプロセス数が必要です。Webサーバが1台で不十分なら,複数台用意し,負荷分散機でアクセスを分散させるなどしてWebサービスを保証できるように運用設計してください。
このようにWebサービスの資源を用意しても,一時的に過負荷状態が発生する場合に備えて,流量制限機能を使用してください。mod_hws_qosによる流量制限機能の概要を次に示します。
図4-10 mod_hws_qosによる流量制限機能の概要
- <この節の構成>
- (1) mod_hws_qosモジュールの組み込み
- (2) ディレクティブの設定方法
- (3) レスポンスメッセージ
- (4) 注意事項
(1) mod_hws_qosモジュールの組み込み
流量制限機能を使用するためにはmod_hws_qosモジュールの組み込みが必要です。mod_hws_qosモジュールを組み込むには,コンフィグファイル(httpsd.conf)に次に示すディレクティブを指定します。
- UNIX版
LoadModule hws_qos libexec/mod_hws_qos.so
|
- Windows版
LoadModule hws_qos modules/mod_hws_qos.so
|
(2) ディレクティブの設定方法
流量制限機能を使用するための,各ディレクティブの設定例を次に示します。
(a) サーバプロセス数の制限によるリクエスト拒否
次のように指定すると,リクエスト処理中のサーバスレッド数が13の場合には,新たなリクエスト要求はステータスコード503で拒否されます。
- UNIX版
MaxClients 15
QOSRejectionServers 2
QOSCookieServers 0
- Windows版
ThreadsPerChild 15
QOSRejectionServers 2
QOSCookieServers 0
(b) クッキーを使用したセション管理
クッキーを使用したセション管理には,Hitachi Web Serverで作成したクッキーを使用するHWS作成モードと,Hitachi Web Server以外の外部モジュールなどで作成されたクッキーを使用するユーザ作成モードがあります。QOSCookieNameディレクティブを用いて,どちらの方式を使用するかを選択します。QOSCookieNameディレクティブの詳細については,「6.2 ディレクティブの詳細」を参照してください。
- HWS作成モード
- リクエスト処理を実施した場合には,Hitachi Web Serverで作成したクッキーが,レスポンスヘッダのSet-Cookieヘッダに付けられます。Hitachi Web Serverで作成したクッキーを持ったリクエスト要求は,持っていないリクエスト要求よりも優先して処理されます。
- ユーザ作成モード
- Hitachi Web Server以外で作成されたクッキーがレスポンスヘッダのSet-Cookieヘッダに付けられる場合に,そのクッキーを使用した流量制限が実行されます。そのクッキーを持ったリクエスト要求は,持っていないリクエスト要求よりも優先して処理されます。
次のように指定すると,リクエスト処理中のサーバスレッド数が10の場合,クッキーを持っていない新しいセションのリクエスト要求は拒否されますが,クッキーを持った継続セションは処理されます。リクエスト処理中のサーバスレッド数が13の場合は,クッキーを持っているかどうかに関係なく拒否されます。この例ではHWS作成モードで動作します。
- UNIX版
MaxClients 15
QOSRejectionServers 2
QOSCookieServers 5
- Windows版
ThreadsPerChild 15
QOSRejectionServers 2
QOSCookieServers 5
(c) リダイレクト
流量制限機能によってリクエスト処理を拒否する場合には,ステータスコード503でレスポンスメッセージを返送しますが,次のように指定すると,ほかのWebサーバへリダイレクトさせることができます。/index.htmlへのリクエスト要求が流量制限機能によって拒否された場合には,www1.hitachi.co.jpのWebサーバのindex.htmlをレスポンスヘッダに設定し,ステータスコード302で返送されます。
QOSRedirect /index.html http://www1.hitachi.co.jp/index.html
(d) レスポンスメッセージのカスタマイズ
次のように指定すると,拒否されたリクエストに対するレスポンスは,ステータスコード503で,レスポンスメッセージは,htdocs/busy.htmlの内容が返送されます。
QOSResponse file "text/html; charset=ISO-8859-1" htdocs/busy.html
(3) レスポンスメッセージ
(a) サーバからクライアントに送信されるクッキーについて
- HWS作成モード
- Hitachi Web Serverで作成したクッキーは,Set-Cookieヘッダによってクライアントへ返送されます。Set-Cookieヘッダは一つのレスポンスに複数指定できるため,ここで作成するクッキーは,ほかのクッキーに影響しません。Hitachi Web Serverで返送するSet-Cookieヘッダを次に示します。
Set-Cookie: NAME=VALUE; expires=DATE; path=/; domain=DOMAIN_NAME; secure
|
- NAME=VALUE
- NAMEにはQOSCookieNameディレクティブで指定した名称が設定されます。VALUEにはリクエスト制御用の値が設定されます。
- expires=DATE
- クッキーが無効となる時刻。"リクエストの受信時刻+QOSCookieExpiresディレクティブ設定値"によって求めた値が,RFC822形式で設定されます。
- path=/
- クッキーが有効となるURL。このモジュールでは,クッキーが有効となるドメイン内の,すべてのURLで有効となるように設定されます。
- domain=DOMAIN_NAME
- クッキーが有効となるドメイン。QOSCookieDomainディレクティブで指定されます。
- secure
- SSLによる通信時だけ,クッキーをクライアントからサーバに送信するかどうかの指定。QOSCookieSecureディレクティブで指定されます。
- ユーザ作成モード
- Hitachi Web Serverではクッキーを作成しません。Hitachi Web Server以外で作成されたクッキーが,Set-Cookieヘッダによってクライアントへ返送されます。
(b) 流量制限機能によって拒否された場合のヘッダについて
流量制限機能によって拒否された場合,レスポンスメッセージをキャッシュできなくするためのヘッダであるExpiresを,レスポンスヘッダに含めます。これは,サーバ側でリクエスト処理が可能であっても,プロキシ又はブラウザでキャッシュされると,キャッシュされたメッセージがブラウザに表示されて,サーバにリクエストしない場合があるためです。また,拒否メッセージ送信後はサーバ側からコネクションを切断します。
そのほかのレスポンスヘッダは,次のように設定されます。Content-Typeには,AddDefaultCharsetで指定した文字セットが付加されます。
- (i)ステータスコード503の標準メッセージ
- Content-Type:text/html
- (ii)QOSResponseによるカスタマイズされたメッセージ
- Content-Type:QOSResponseディレクティブ指定値
- (iii)QOSRedirectによるステータスコード302のメッセージ
- Content-Type:text/html
- Location:QOSRedirectディレクティブ指定値
- クッキーの受け付けを拒否しているクライアントは,クッキーをサーバに送信しないため,「(2)(b) クッキーを使用したセション管理」の機能が無効となります。
- KeepAliveによって接続した場合には,接続後最初のリクエストを処理するときだけ判定処理が行われ,同一接続上で2回目以降のリクエストでは判定されません。最初に接続したリクエストとは異なる流量制限設定へのリクエストである場合も,2回目以降のリクエストでは判定されません。
- 流量制限機能によってアクセス拒否された場合に送信されるメッセージは,ErrorDocumentディレクティブを指定しても変更されません。また,RedirectディレクティブやRedirectMatchディレクティブの処理は,mod_hws_qosモジュールの制御によって処理を継続すると判定された後に実行されます。
- 流量制限機能を使用しても,QOSRejectionServersディレクティブの設定数を超えた同時リクエストを受信した場合は,リクエストの拒否が正しくできないことがあります。QOSResponseディレクティブで指定されたHTMLファイルに画像データなどのリンクが含まれている場合には,画像データを取得するため,さらにアクセスします。このアクセスも流量制限処理の対象となり,画像データが取得できない場合があります。HTMLファイル作成時には,リンクの設定に注意してください。
- エラードキュメントの文字セットは,Windows版ではHWSErrorDocumentMETACharsetディレクティブの設定を有効とします。
- クッキーを使用したセション管理をURLごと,又はVirtualHostごとに設定する場合は,QOSCookieNameディレクティブで別の名称を指定する必要があります。
- QOSCookieServersディレクティブ及びQOSRejectionServersディレクティブは,サーバプロセス数(ThreadsPerChildディレクティブ又はMaxClientsディレクティブで設定)より後ろに指定してください。サーバプロセス数よりも前に指定すると,サーバが起動できない場合があります。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.