2. basic functionspublic.dhe.ibm.com/.../ihsv7guide_02basicfunctions.pdf10 機能概要(1/2)...

50
Guide of IBM HTTP Server V7.0 2. Basic Functions

Upload: others

Post on 19-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

Guide of IBM HTTP Server V7.0

2. Basic Functions

Page 2: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

2

ご注意

この資料に含まれる情報は可能な限り正確を期しておりますが、日本アイ・ビー・エム株式会社ならびに日本アイ・ビー・エム システムズ・エンジニアリング株式会社の正式なレビューを受けておらず、当資料に記載された内容に関して日本アイ・ビー・エム株式会社ならびに日本アイ・ビー・エム システムズ・エンジニアリング株式会社は何ら保証するものではありません。

従って、この情報の利用またはこれらの技法の実施はひとえに使用者の責任において為されるものであり、資料の内容によって受けたいかなる被害に関しても一切の補償をするものではありません。

当資料をコピー等で複製することは、日本アイ・ビー・エム株式会社、日本アイ・ビー・エム システムズ・エンジニアリング株式会社および執筆者の承諾なしではできません。また、当資料に記載された製品名または会社名はそれぞれの各社の商標または登録商標です。

Page 3: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

3

Agenda

1. 複数URLへの対応

2.性能情報の表示

3.URLの書き換えとアクセス制御

4.ログのカスタマイズ

5.IHS管理サーバー

6. WAS管理下に統合

参考文献

Page 4: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

4

1. 複数URLへの対応

Page 5: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

5

機能概要

VirtualHostとは1台のサーバーで複数のURL(ドメイン)に対応する機能

IP-Base VirtualHost ・・・ 複数のIPアドレスでサービス

Name-Base VirtualHost ・・・ 複数のホスト名でサービス

(Port-Base VirtualHostとも呼ばれる)

IHSにおいてVirtualHostの設定が必要なケース

上記ケースでは、IHSでVirtualHostを設定する

クライアント

Webサーバー(IHS)

abcd.co.jp

efgh.or.jp

http://www.abcd.co.jp

http://www.efgh.or.jp

異なる複数のURL(ドメイン)で

リクエストを受け付けたい

異なる複数のURL(ドメイン)で

リクエストを受け付けたい1台のサーバーで

処理したい

1台のサーバーで

処理したい

Page 6: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

6

ネットワーク構成構成済ネットワーク・アダプターにIPアドレスを追加 (ifconfigコマンド)

追加したIPアドレスの名前解決の確認 (ping [ホスト名]コマンド)

httpd.conf

主な VirtualHost のディレクティブ

IP-Base VirtualHostの設定

<VirtualHost 9.170.19.214>ServerAdmin [email protected] /usr/IHSV7/htdocs/en_US2ServerName virtual.makuhari.japan.ibm.comErrorLog /usr/IHSV7/logs/error_log2CustomLog /usr/IHSV7/logs/access_log2 common2</VirtualHost>

追加したIPアドレス追加したIPアドレス

追加したIPアドレスで使用する

ホスト名

追加したIPアドレスで使用する

ホスト名

# ifconfig en0 alias 9.170.19.214 netmask 255.255.255.0

ServerAdmin エラー発生時に生成される自動ページのメールアドレスDocumentRoot ファイルの提供元となるディレクトリ/ファイル名ServerName ホスト名ErrorLog サーバーで発生したエラーを記録するファイル名TransferLog サイトへのアクセスログを格納するファイル名ServerAlias 現在のVirtualHostとマッチ別名の一覧NameVirtualHost Name-Base VirtualHostで使用するIPアドレス

Page 7: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

7

ネットワーク構成異なる名前が同じIPアドレスで名前解決できるかの確認

(ping [ホスト名] コマンド)

httpd.conf

IPアドレスに「*」を設定することにより、複数のIPアドレスで同じサー

ビスを受けることが可能

Name-Base VirtualHostの設定

NameVirtualHost 9.170.19.214・・・・・

<VirtualHost 9.170.19.214>ServerAdmin [email protected] /usr/IHSV7/htdocs/en_US2ServerAlias test2ServerName test.makuhari.japan.ibm.comErrorLog /usr/IHSV7/logs/error_log2CustomLog /usr/IHSV7/logs/access_log2 common2</VirtualHost>

追加したIPアドレス追加したIPアドレス仮想ホストに使用するIPアドレス仮想ホストに使用するIPアドレス

別ホスト名別ホスト名

NameVirtualHost 12.34.56.*・・・</VirtualHost 12.34.56.* >

Page 8: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

8

考慮点

VirtualHost 定義にないリクエスト処理httpd.conf で指定した VirtualHost 定義に一致しないリクエストを受け取った場合は、httpd.conf の中で最初に記述したVirtualHost で処理される

ユーザーには意図しないコンテンツが送られてしまうことがある

Name-Base VirtualHostName-Base VirtualHost では、仕様上、正しいSSL証明書を使用することができない

Name-Base VirtualHostはSSL通信の設定を行うことができない

Page 9: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

9

2. 性能情報の表示

Page 10: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

10

機能概要(1/2)

mod_statusとはサーバがどのくらいの性能で動作しているかを知る

現時点でのサーバの統計情報を読みやすいHTML 形式で表示

一定時間毎のリフレッシュが可能

頻繁にアクセスがあるサイトを管理する際に有用致命的な状態になる前に、問題の発生を検知できる

内部的な情報が表示されるため、別途セキュリティ対策として、mod_statusへのアクセス制御を行う

ブラウザクライアント

IHSmod_statusの出力結果

HTTP

Page 11: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

11

機能概要(2/2)

表示できる項目リクエストを扱っているワーカーの数

アイドル (リクエストを扱っていない) ワーカーの数

各ワーカーの状態、ワーカーが扱ったリクエストの数、 ワーカーが送った総バイト数 (*)

総アクセス数と総バイト数 (*)

サーバが起動もしくは再起動された時刻と動作している時間

平均の 1 秒あたりのリクエスト数、1 秒あたりの送られたバイト数、リクエストあたりのバイト数 (*)

各ワーカーと Apache 全体で使用されている CPU の割合 (*)

現時点のホストと処理されているリクエスト (*)

(*)は、ExtendedStatusディレクティブをONに設定する必要がある

Page 12: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

12

mod_statusの設定

httpd.confstatus_moduleのロード (デフォルト)

LoadModule status_module modules/mod_status.so

ExtendedStatusディレクティブの設定

ロケーションの設定

LoadModule status_module modules/mod_status.so<IfModule mod_status.c>ExtendedStatus On</IfModule>・・・<IfModule mod_status.c><Location /server-status>

SetHandler server-statusOrder Deny,AllowDeny from allAllow from makuhari.com

</Location></IfModule>

拡張ステータス情報の表示(デフォルト on)

拡張ステータス情報の表示(デフォルト on)

ロケーションの設定(デフォルトAllow fromの設定なし)

ロケーションの設定(デフォルトAllow fromの設定なし)

Page 13: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

13

サーバの統計情報の表示http://<servername>/server-status/

アクセスするURLの変更httpd.conf

一定時間毎のリフレッシュhttp://<servername>/server-status?refresh=NNはリフレッシュを行うタイミング(秒)を指定

mod_statusの表示(1/2)

<Location /IHS-status>SetHandler server-statusOrder Deny,AllowDeny from allAllow from makuhari.com

</Location>

この設定の場合、URLは下記になるhttp://<servername>/IHS-status/この設定の場合、URLは下記になるhttp://<servername>/IHS-status/

SetHandlerは、変更しないSetHandlerは、変更しない

Page 14: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

14

mod_statusの表示(2/2)

Machine Readable Status Filehttp://<servername>/server-status?autoプログラム内で処理しやすいフォーマットで出力され、log_server_statusを利用することで、定期的にテキストファイルへの

保存が可能

Page 15: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

15

mod_mpmstatの設定

下記のように、サーバー活動状況の統計情報を取得することが可能

IHS7.0ではデフォルトOnであり、600秒毎にError_logに出力httpd.conf

この情報を取得する要件がなく、(600秒毎ですが)パフォーマンスへの影響を考慮する場合には、mod_mpmstatをロードしないで下さい

mod_mpmstat

[Wed Jan 21 16:30:16 2009] [notice] mpmstats: rdy 598 bsy 2 rd 0 wr 0 ka 2 log 0 dns 0 cls 0

rdy 待機状態のスレッド数bsy 処理中のスレッド数rd 読み取り中のスレッド数wr 書き込み中のスレッド数ka キープアライブ接続中のスレッド数log ログ出力中のスレッド数dns DNSルックアップ中のスレッド数cls 終了処理中のスレッド数

LoadModule mpmstats_module modules/debug/mod_mpmstats.so <IfModule mod_mpmstats.c> ReportInterval 600 TrackModules On </IfModule>

不要な場合は、ロードしない不要な場合は、ロードしない

600秒毎にデータを取得600秒毎にデータを取得

Page 16: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

16

3. URLの書き換えとアクセス制御

Page 17: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

17

機能概要

mod_rewriteとはブラウザから指示されたURLを内部的に書き換えるモジュール

様々な環境変数(ブラウザの種類、IPアドレス、ドメインネームなど)を参照して、アクセス制限を実現

rewrite前のページ rewrite後のページ

LoadModule rewrite_module modules/mod_rewrite.so<IfModule mod_rewrite.c>RewriteEngine OnRewriteRule /index.html /index_rewrite.html</IfModule>

httpd.conf 例

Page 18: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

18

mod_rewriteの設定

httpd.confrewrite_moduleのロード

LoadModule rewrite_module libexec/apache/mod_rewrite.so

mod_rewriteの基本書式1.rewrite機能を有効にする

2.(オプション)rewriteの対象とするリクエストの条件(IPアドレスなど)を指定する

3.どのような書き換えを行うかを指示する

LoadModule rewrite_module modules/mod_rewrite.so・・・<IfModule mod_rewrite.c>RewriteEngine OnSetEnvIf Request_URI "test.html" nologRewriteLog "logs/rewrite_log"RewriteLogLevel 1RewriteRule ^/.*$ http://9.188.52.172/test.html</IfModule>

Page 19: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

19

mod_rewriteのディレクティブ

主なディレクティブRewriteEngine

ランタイムrewriteエンジンを使用可能、不可能にする。onかoffを指定する

RewriteLogファイルにログを出力する

RewriteCondテスト文字列と条件パターンを定義する

RewriteRuleの前にRewriteCond条件を挿入する。どの場合にRewriteRuleの命令を実行す

るか条件を記入する。条件はテスト文字列の値とマッチングをテストする正規表現である。

RewriteRule必要に応じて何度でも使用できる

命令を2度以上指定することが可能。ホスト名やディレクトリなど、書き換える内容を書く。オプション引数としてフラグを渡すことができる。フラグは1文字、または2文字で略記でも指定できる。

主なフラグredirect | R 強制的にリダイレクトを行う

last | L Rewrite処理を停止して、これ以上のRewriteのルールを割り当てない

nocase | NC 大文字と小文字の区別しないようにする

chain | C 次のRewriteRuleと連結する

Page 20: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

20

mod_rewriteの例(1/3)

要件特定のクライアント(IPアドレスが9.170.19.137)に対して、URLの書

き換えを行う

設定httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so・・・<IfModule mod_rewrite.c>RewriteEngine On

RewriteCond %{REMOTE_ADDR} 9¥.170¥.19¥.137RewriteRule /index.html /index_rewrite.html

</IfModule>

rewrite機能をONにするrewrite機能をONにする

書き換えの対象となる条件を指定する。%{}の中は、条件に当てはまるか

どうかの環境変数を入力する。REMOTE_ADDRは、クライアント

のIPアドレスに対して条件を指定する。

書き換えの対象となる条件を指定する。%{}の中は、条件に当てはまるか

どうかの環境変数を入力する。REMOTE_ADDRは、クライアント

のIPアドレスに対して条件を指定する。

書き換える内容を示す。この設定では、/index.htmlのファイル要求に対して、/index_rewrite.htmlと書き換える

書き換える内容を示す。この設定では、/index.htmlのファイル要求に対して、/index_rewrite.htmlと書き換える

Page 21: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

21

mod_rewriteの例(2/3)

要件常に同じドメイン名 (例:silver2.makuhari.japan.ibm.com)でアクセス

する別の形式(例:IPアドレス指定)でアクセスするとsilver2.makuhari.japan.ibm.comに強制的にリダイレクトする

設定httpd.conf

RewriteEngine onRewriteCond %{HTTP_HOST} !^silver2¥.makuhari¥.japan¥.ibm¥.comRewriteCond %{HTTP_HOST} !^$RewriteCond %{SERVER_PORT} !^80$RewriteRule ^/(.*) http://silver2.makuhari.japan.ibm.com:%{SERVER_PORT}/$1 [L,R]RewriteCond %{HTTP_HOST} !^silver2¥.makuhari¥.japan¥.ibm¥.comRewriteCond %{HTTP_HOST} !^$RewriteRule ^/(.*) http://silver2.makuhari.japan.ibm.com/$1 [L,R]

次のRewriteRuleは、silver2.mkauhari.japana.ibm.comのアドレス以外でアクセス したら、強制的にsilver2.mkauhari.japana.ibm.comに変換する

次のRewriteRuleは、silver2.mkauhari.japana.ibm.comのアドレス以外でアクセス したら、強制的にsilver2.mkauhari.japana.ibm.comに変換する

最初のRewriteRuleは、ポート番号80でsilver2.mkauhari.japana.ibm.comのアドレス以外のポート番号もしくはアドレスでアクセスしたら、silver2.makuhari.japan.ibm.com:ポート番号に変換する。

最初のRewriteRuleは、ポート番号80でsilver2.mkauhari.japana.ibm.comのアドレス以外のポート番号もしくはアドレスでアクセスしたら、silver2.makuhari.japan.ibm.com:ポート番号に変換する。

Page 22: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

22

mod_rewriteの例(3/3)

要件UserAgent毎に異なるページを表示する

キャリア毎(携帯端末、ブラウザ)にページをディレクトリ単位で分ける

http://www.ise.com/i/、http://www.ise.com/j/ 等

公開するアドレスを統一するため、キャリア毎にディレクトリに振り分ける

i-mode Cellphone

EZwebCellphone

Internet Explorer

Response/i/index.htm

Request/index.html

Response/au/index.hdml

Request/index.html

Response/IE7.0/index.htm

Request/index.html

RequestURL: http://www.ise.com/ キャリア毎のuser-Agentヘッダ例

・i-modeF502i DoCoMo/1.0/F502i…

・EZWebUP.Browser/ …

・Internet ExplorerMozilla/4.0 (compatible; MSIE 7.0; …

IHS

Page 23: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

23

【補足】 環境変数

主な環境変数 (%{}の中で指定)HTTP_USER_AGENT ブラウザの種類、バージョンなどの情報

HTTP_REFERER リンクをたどって来た場合のリンク元URL

HTTP_COOKIE クッキーの情報

REMOTE_ADDR クライアントのIPアドレス

REMOTE_HOST クライアントのドメインネーム

REMOTE_USER 認証されたUSERの名前

HTTP headers:HTTP_USER_AGENTHTTP_REFERERHTTP_COOKIEHTTP_FORWARDEDHTTP_HOSTHTTP_PROXY_CONNECTIONHTTP_ACCEPT

connection & request:REMOTE_ADDRREMOTE_HOSTREMOTE_PORTREMOTE_USERREMOTE_IDENTREQUEST_METHODSCRIPT_FILENAMEPATH_INFOQUERY_STRINGAUTH_TYPE

server internals:DOCUMENT_ROOTSERVER_ADMINSERVER_NAMESERVER_ADDRSERVER_PORTSERVER_PROTOCOLSERVER_SOFTWARE

server internals:TIME_YEARTIME_MONTIME_DAYTIME_HOURTIME_MINTIME_SECTIME_WDAYTIME

specials:API_VERSIONTHE_REQUESTREQUEST_URIREQUEST_FILENAMEIS_SUBREQHTTPS

環境変数一覧

Page 24: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

24

【補足】 正規表現

主な正規表現. 任意の一文字

[abc] a、b、cのうちのどれか一文字

[^abc] a、b、c以外のどれか一文字

string1|string2 string1またはstring2

? 直前の文字の0、または1回

ab?cならac、abc

* 直前の文字の任意回

ab*cならac、abc、abbc・・・

+ 直前の文字の任意回(一回以上)

ab+cならabc、abbc、abbbbc・・・

^ 行頭

$ 行末

¥ ここの表現を、その文字そのものとして扱う

Page 25: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

25

4. ログのカスタマイズ

Page 26: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

26

どんな時にログをカスタマイズするか?

ログのカスタマイズが有効なケース

IHSLoad

Balancer WAS

Cookie

Cookie ログ

クライアント

Cookie

クライアント

クライアント

管理者

GIF

Cookieログ

環境に合わせてログファイル名を変更したい

環境に合わせてログファイル名を変更したい

Cookieの内容を

単体ログにロギングしたい

Cookieの内容を

単体ログにロギングしたい

マシンリソースに余裕がないのでできるだけログのファイルサイズを減らしたい

マシンリソースに余裕がないのでできるだけログのファイルサイズを減らしたい

特定IPアドレスからのアクセスは

ロギングしなくて良い

特定IPアドレスからのアクセスは

ロギングしなくて良い

画像ファイルへのアクセスはロギングしなくて良い

画像ファイルへのアクセスはロギングしなくて良い

Page 27: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

27

関連モジュールとディレクティブ(1/2)

モジュールmod_log_config

クライアントのリクエストを柔軟にログ収集する機能を提供する

ディレクティブLogFormat

ログの書式とそのニックネームを定義する

CustomLogログファイルを定義し、使用する書式のニックネームを指定する

他にTransferLogディレクティブがあり、LogFormatと組み合わせて使用することができる。できることは上記2つと同じ。

LogFormat "%h %l %u %t ¥"%r¥" %>s %b" common

CustomLog logs/access_log common

Page 28: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

28

関連モジュールとディレクティブ(2/2)

モジュールmod_setenvif

リクエストの特徴に基づいた環境変数の設定を可能にする

ディレクティブSetEnvIf

リクエストの属性に基づいて環境変数を設定する

BrowserMatchHTTP User-Agent に基づいて環境変数を設定する

SetEnvIfを使って以下の様に設定するのと同じ

SetEnvIf Request_URI "¥.gif$" object_is_image=gif

BrowserMatch ^IMozilla browser=netscape

SetEnvIf User-Agent ^Mozilla browser=netscape

Page 29: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

29

デフォルトのログファイル書式Common Log Format (CLF) と呼ばれる以下の形式

各々のリクエストは1行で格納される

スペースによって区切られた各項目で構成

ログファイルの書式(1/2)

<access_log>9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET / HTTP/1.1" 200 32169.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /http_server_styles.css HTTP/1.1" 200 11849.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/odot.gif HTTP/1.1" 200 499.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/background.gif HTTP/1.1" 200 1830999.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/administration.gif HTTP/1.1" 200 2239.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/help.gif HTTP/1.1" 200 2109.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/support.gif HTTP/1.1" 200 1509.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/notes.gif HTTP/1.1" 200 1709.170.233.229 - - [11/Jun/2009:07:20:54 +0000] "GET /images/foreground.gif HTTP/1.1" 200 53680

LogFormat "%h %l %u %t ¥"%r¥" %>s %b” commonCustomLog logs/access_log common

リモートホスト

リモートログ名

リモートユーザー

時刻

リクエストの最初の行

ステータスコード

レスポンスのバイト数

Page 30: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

30

書式のカスタマイズLogFormatディレクティブでログの書式とニックネームを指定する

書式にはログファイルにそのまま書かれる文字列や、改行とタブを表すC言語形式の制御文字”¥n”と”¥t”とを含めることができる

引用符とバックスラッシュはバックスラッシュでエスケープする必要がある

それぞれのリクエストの属性は”%”ディレクティブを使って取得する

指定できる”%”ディレクティブについては次ページ参照

”%”の直後に HTTP ステータスコードをカンマ区切りで指定することで、表示を制限することができる

例えば、”%400,500{User-agent}i”では、 400 と 500 番エラーでのみ User-agent を記録し、他のステータスコードでは “-” という文字列を記録する

CustomLogディレクティブでログファイルのパスと書式を指定ログファイルのパスを指定

書式はLogFormatディレクティブで定義したニックネームを指定

ログファイルの書式(2/2)

LogFormat "%h %l %u %t ¥"%r¥" %>s %b %D ¥”%{User-Agent}i¥”" myformat

CustomLog logs/my_log myformat

Page 31: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

31

[参考] 指定できる“%”ディレクティブ

%% パーセント記号%a リモート IP アドレス%A ローカル IP アドレス%B レスポンスのバイト数。HTTP ヘッダは除く。%b レスポンスのバイト数。HTTP ヘッダは除く。CLF 書式。 すなわち、1 バイトも送られなかったときは 0 ではなく、 '-' になる%{Foobar}C サーバに送られたリクエスト中のクッキー Foobar の値%D リクエストを処理するのにかかった時間、マイクロ秒単位%{FOOBAR}e 環境変数 FOOBAR の内容%f ファイル名%h リモートホスト%H リクエストプロトコル%{Foobar}i サーバに送られたリクエストの Foobar: ヘッダの内容%l (identd からもし提供されていれば) リモートログ名。

これは mod_ident がサーバに存在して、 IdentityCheck ディレクティブが On に設定されていない限り、 - になる%m リクエストメソッド%{Foobar}n 他のモジュールからのメモ Foobar の内容%{Foobar}o 応答の Foobar: ヘッダの内容%p リクエストを扱っているサーバの正式なポート%P リクエストを扱った子プロセスのプロセス ID%{format}P リクエストを扱ったワーカーのプロセス ID かスレッド ID。 format として有効な値は pid, tid, hextid です。

hextid を使うには APR 1.2.0 以降が必要です。%q 問い合せ文字列 (存在する場合は前に ? が追加される。 そうでない場合は空文字列)%r リクエストの最初の行%s ステータス。内部でリダイレクトされたリクエストは、元々の リクエストのステータス --- 最後のステータスは %>s%t リクエストを受付けた時刻。 CLF の時刻の書式 (標準の英語の書式)%{format}t format で与えられた書式による時刻。format は strftime (3) の 書式である必要がある。(地域化されている可能性がある)%T リクエストを扱うのにかかった時間、秒単位%u リモートユーザ (認証によるもの。ステータス (%s) が 401 のときは意味がないものである可能性がある)%U リクエストされた URL パス。クエリ文字列は含まない%v リクエストを扱っているサーバの正式な ServerName%V UseCanonicalName の設定によるサーバ名%X 応答が完了したときの接続ステータス:

X = 応答が完了する前に接続が異常終了+ = 応答が送られた後に接続を持続することが可能- = 応答が送られた後に接続が切られる

%I リクエストとヘッダを含む、受け取ったバイト数。 0 にはならない。 これを使用するためには mod_logio が必要%O ヘッダを含む、送信したバイト数。0 にはならない。 これを使用するためには mod_logio が必要

Page 32: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

32

リクエストの属性に基づいて環境変数を指定以下の3つの属性が指定可能

HTTPリクエストヘッダフィールドHost, User-Agent, Referer, Accept-Language など

以下のリクエストの一部のいずれかRemote_Host - リクエストを行なっているクライアントのホスト名 (もしあれば)

Remote_Addr - リクエストを行なっているクライアントの IP アドレス

Server_Addr - リクエストを受け取ったサーバの IP アドレス (2.0.43 以降のみ)

Request_Method - 使用されているメソッド名 (GET, POST など)

Request_Protocol - リクエストが行なわれたプロトコルの名前とバージョン (例えば、"HTTP/0.9", "HTTP/1.1" など。)

Request_URI - URL のスキームとホストの後の部分

既にリクエストに関連付けられている環境変数

属性の指定には正規表現を使用する

環境変数には値を設定することも可能

CustomLogディレクティブでロギングする対象のリクエストを指定する環境変数が合致しないものをロギング

環境変数が合致するもののみをロギング

環境変数

CustomLog logs/access_log common env=!object_is_image

CustomLog logs/image_log common env=object_is_image

SetEnvIf Request_URI "¥.gif$" object_is_image=gifSetEnvIf Request_URI "¥.jpg$" object_is_image=jpg

Page 33: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

33

LogFormat “%h %l %u %t ¥”%r¥” %>s %b” commonLogFormat “%h %l %u %t ¥”%r¥” %>s %b %D” resptime

#CustomLog logs/access_log commonCustomLog logs/access_log resptime

レスポンスタイムを取得したい

%Dを使ってレスポンスタイムを

取得する書式を新たに定義

画像ファイルへのアクセスを記録しない

LogFormat “%h %l %u %t ¥”%r¥” %>s %b” common

SetEnvIf Request_URI “¥.gif$” image=gifSetEnvIf Request_URI “¥.jpg$” image=jpg

CustomLog logs/access_log common env=!image

デフォルトのCLF形式のログ

ニックネーム

環境変数

画像ファイル(.gif と .jpg)への

リクエストに環境変数をセット

image環境変数のないリクエストをアクセスをログに記録

ログ設定例(1/3)

新たに定義した書式でログを記録

Page 34: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

34

LogFormat “%h %l %u %t ¥”%r¥” %>s %b” common

SetEnvIf Remote_Addr 9¥.188¥.52¥.73 deny_ip

CustomLog logs/access_log common env=!deny_ip

特定IPからのアクセスを記録しない

負荷分散装置からの監視アクセスを別のログに記録する

LogFormat “%h %l %u %t ¥”%r¥” %>s %b” common

BrowserMatch IBM_Load_Balancer_HTTP_Advisor LB

CustomLog logs/access_log common env=!LBCustomLog logs/advisor_log common env=LB

ログ設定例(2/3)

拒否するIPからのアクセスに

環境変数をセット

Load BalancerのUser-Agentからの

アクセスに環境変数をセット

LBからのアクセスを記録

LB以外のアクセスを記録-

Page 35: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

35

ログ設定例(3/3)

負荷分散装置やプロキシーが送信するクライアントアドレスを記録する

NAT転送をする負荷分散装置やプロキシーを経由するリクエストは、リモートホストが負荷分散装置やプロキシーとなるために実際のクライアントIPが記録できない

負荷分散装置やプロキシーによってはクライアントIPをHTTPヘッダーに追加する機能がある場合がある

F5 Big-IPのNAT転送では「X-Forwarded-For」ヘッダーにクライアントIPを含める事が可能

Edge Components Caching Proxyでは「Client-IP」ヘッダーにクライアントIPを含める事が可能

ログをカスタマイズしてこのヘッダーを取得することが可能

LogFormat “%h %l %u %t ¥”%r¥” %>s %b” commonLogFormat "%{X-Forwarded-For}i %l %u %t ¥"%r¥" %>s %b" common

CustomLog logs/access_log common

IHSNAT

Proxy

IPログ

クライアント

IPIP

IP負荷分散装置やプロキシーのIPアドレスが記録される

Page 36: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

36

5. IHS管理サーバー

Page 37: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

37

機能概要

IHS 管理サーバーとはhttpd.confを編集するhttpdのプロセス

admin.confにて定義され、別のポート(:8008)でサービスを行う

IHSをWebSphere管理下に統合するとBasic認証を行った上で、デプロイメント・マネージャーから処理要求を受け付ける

セキュリティー要件等により、IHSとWASをリモート(別筐体)構成とした際に、IHS管理サーバーを経由してWASから以下を行うことが可能

IHSの状況モニター

IHSプラグイン構成ファイルの生成・伝搬

IHSの始動・停止

Page 38: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

38

構成手順(1/2)

IHS管理サーバのインストールWASのランチパッドから、IHSのインストール・ウィザードを起動

ウィザードに従ってインストールIHSのポート番号とIHS管理サーバーのポート番号を入力

IHS管理サーバーのセットアップ、ユーザーIDおよびグループの作成

IHS管理サーバーの認証用ユーザーIDの作成

Page 39: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

39

構成ファイルと認証ファイルのアクセス権限の付与AIX®、HP-UX、Linux® 、 Solaris

IHS管理サーバーのアクセス許可AIX、HP-UX、Linux、Solaris 、 Windows 管理コンソールにて、リモート Web サーバーのプロパティーのユーザー ID フィールドに入力したユーザー IDを指定する

構成手順(2/2)

# <IHS_INSTALL_ROOT>/bin/setupadm -create -usr [ユーザーID] -grp [グループID] -cfg <IHS_INSTALL_ROOT>/conf/httpd.conf -adm <IHS_INSTALL_ROOT>/conf/admin.conf

# <IHS_INSTALL_ROOT>/bin/htpasswd-cm <IHS_INSTALL_ROOT>/conf/admin.conf [ユーザーID]

Page 40: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

40

6. WebSphere管理下に統合

Page 41: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

41

機能概要

WebSphere管理コンソールによるWebサーバーの管理始動・停止

状況モニター

構成ファイルの表示・編集

プラグイン構成ファイルの表示・編集

プラグイン構成ファイルの生成・伝搬

Page 42: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

42

構成手順(1/4)

IHS7.0 のインストールWASのランチパッドから、IHSのインストール・ウィザードを起動

ウィザードに従ってインストールIHSのポート番号とIHS管理サーバーのポート番号を入力

Windowsの場合は、ウィンドウズ・サービスへの登録内容を入力

Page 43: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

43

構成手順(2/4)

プラグインのインストールWASのランチパッドからプラグインのインストール・ウィザードを起動

ウィザードに従ってインストール構成するWebサーバーを指定

Webサーバー構成ファイルとポート番号(デフォルト80)を入力

Webサーバー定義名を入力

Page 44: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

44

構成手順(3/4)

IHS7.0 のWebSphereセルへの統合リモート構成の場合、IHS管理サーバーを起動

WebSphere管理コンソールからWebサーバーを構成Webサーバーの選択とプロパティの入力

サーバー名の入力サーバー名の入力

リモート構成の場合リモート構成の場合

Page 45: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

45

構成手順(4/4)

コマンドによるIHS7.0 のWebSphereセルへの統合リモート構成の場合、 IHS管理サーバーを起動

デプロイメント・マネージャー、ノード・エージェントを起動

Webサーバー構成用のスクリプトからWebサーバーを構成

導入手順の詳細は、「WebSphere Application Server V7.0 導入ガイド」をご確認下さい

# cd <WAS_INSTALL_ROOT>/bin

# <PLUGIN_INSTALL_ROOT>/bin/configurewebserver1.sh

WASX7209I: ノード yumikoCellManager01 のプロセス "dmgr" に、SOAP コネクターを使用して接続しました。プロセスのタイプは DeploymentManager です。WASX7303I: 次のオプションはスクリプト環境に渡され、argv 変数に格納される引数として使用可能になります: "[webserver1, IHS, /usr/IBM/HTTPServer7, /usr/IBM/HTTPServer7/conf/httpd.conf, 80, MAP_ALL, /usr/IBM/HTTPServer7/Plugins, unmanaged, tamagoNode01, tamago, aix, 8008, username]“(中略)Start saving the configuration.

Configuration save is complete.

Page 46: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

46

Webサーバーの管理(1/2)

WebSphere管理コンソールによるWebサーバーの管理WebサーバーがIHSの場合

IHSがWASの管理対象/管理対象外ノード上にある場合

IHSの状況モニター

IHSプラグイン構成ファイルの生成・伝搬

IHSのエラー・ログおよびアクセス・ログ表示

IHSの始動・停止

IHS構成ファイルの表示・編集

プラグイン構成ファイルの生成・更新、伝搬

プラグイン構成ファイルの生成・更新、伝搬

Webサーバー定義の作成/削除

Webサーバー定義の作成/削除

Webサーバーの始動/停止・終了

Webサーバーの始動/停止・終了

Page 47: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

47

Webサーバーの管理(2/2)

WebSphere管理コンソールによるWebサーバーの管理WebサーバーがIHS以外の場合

WebサーバーがWASの管理対象ノード上にある場合

Webサーバーの状況モニター

Webサーバー・プラグイン構成ファイルの生成・伝搬

WebサーバーがWASの管理対象外ノード上にある場合

Webサーバーの状況モニター

Webサーバー・プラグイン構成ファイルの生成のみ

選択可能なWebサーバー

Webサーバー作成時に指定できるタイプ

Page 48: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

48

リモートWebサーバーのトポロジー

DMノード

IHSWebサーバー・ノード

セル

構成リポジトリー

Plugin構成ファイル

プラグインの伝搬

Plugin構成ファイル

DMノード

Webサーバー

Webサーバー・ノードセル

構成リポジトリー

Plugin構成ファイル

Plugin構成ファイル

NA

DMノード

Webサーバー

Webサーバー・ノードセル

構成リポジトリー

Plugin構成ファイルPlugin構成ファイル

プラグインの伝搬

手動コピーが必要

プラグインの生成

プラグインの生成

プラグインの生成

管理サーバー

*IHS以外

*IHS以外

<管理コンソール>

<管理コンソール>

<管理コンソール>

・ WebサーバーがIHS、管理サーバー経由の場合

・ WebサーバーがIHS以外、NodeAgent経由の場合

・ WebサーバーがIHS以外、NodeAgentを経由しない場合

状況のモニター

プラグイン構成の生成・伝搬

状況のモニター

プラグイン構成ファイルの生成・伝搬

IHSの起動・停止

状況のモニター

Page 49: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

49

参考文献

Page 50: 2. Basic Functionspublic.dhe.ibm.com/.../IHSV7Guide_02BasicFunctions.pdf10 機能概要(1/2) mod_statusとは サーバがどのくらいの性能で動作しているかを知る

50

参考文献

Apache HTTP サーバ ドキュメンテーションApache HTTP サーバ バージョン 2.2 ドキュメント

http://httpd.apache.org/docs/2.2/

Information CenterIBM HTTP Server for WebSphere Application Server バージョン 7.0

http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.ihs.doc/info/welcome_ihs.html

ワークショップ資料WAS V6 Edge Components & IHSインプリメンテーション・ワークショップ資料

http://www.ibm.com/developerworks/jp/websphere/library/was/edge6_ihs6/

IBM HTTP Server 1.3.19 解説https://www.ibm.com/developerworks/jp/websphere/library/was/ihs13_guide/5.html

その他WebSphere Application Server V7.0 導入ガイド

http://www.ibm.com/developerworks/jp/websphere/library/was/was7_install/#download