...

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

by user

on
Category: Documents
137

views

Report

Comments

Transcript

2. Basic Functions Guide of IBM HTTP Server V7.0
Guide of IBM HTTP Server V7.0
2. Basic Functions
ご注意
„
„
„
この資料に含まれる情報は可能な限り正確を期しておりますが、日本ア
イ・ビー・エム株式会社ならびに日本アイ・ビー・エム システムズ・エンジ
ニアリング株式会社の正式なレビューを受けておらず、当資料に記載さ
れた内容に関して日本アイ・ビー・エム株式会社ならびに日本アイ・ビー・
エム システムズ・エンジニアリング株式会社は何ら保証するものではあ
りません。
従って、この情報の利用またはこれらの技法の実施はひとえに使用者の
責任において為されるものであり、資料の内容によって受けたいかなる
被害に関しても一切の補償をするものではありません。
当資料をコピー等で複製することは、日本アイ・ビー・エム株式会社、日
本アイ・ビー・エム システムズ・エンジニアリング株式会社および執筆者
の承諾なしではできません。また、当資料に記載された製品名または会
社名はそれぞれの各社の商標または登録商標です。
2
Agenda
„
„
„
„
„
„
„
1. 複数URLへの対応
2.性能情報の表示
3.URLの書き換えとアクセス制御
4.ログのカスタマイズ
5.IHS管理サーバー
6. WAS管理下に統合
参考文献
3
1. 複数URLへの対応
4
機能概要
„
VirtualHostとは
‹
1台のサーバーで複数のURL(ドメイン)に対応する機能
¾
¾
„
IP-Base VirtualHost
・・・ 複数のIPアドレスでサービス
Name-Base VirtualHost
・・・ 複数のホスト名でサービス
(Port-Base VirtualHostとも呼ばれる)
IHSにおいてVirtualHostの設定が必要なケース
異なる複数のURL(ドメイン)で
異なる複数のURL(ドメイン)で
リクエストを受け付けたい
リクエストを受け付けたい
abcd.co.jp
1台のサーバーで
1台のサーバーで
処理したい
処理したい
http://www.abcd.co.jp
efgh.or.jp
クライアント
http://www.efgh.or.jp
Webサーバー(IHS)
上記ケースでは、IHSでVirtualHostを設定する
5
IP-Base VirtualHostの設定
„
ネットワーク構成
‹
構成済ネットワーク・アダプターにIPアドレスを追加 (ifconfigコマンド)
# ifconfig en0 alias 9.170.19.214 netmask 255.255.255.0
‹
„
追加したIPアドレスの名前解決の確認 (ping [ホスト名]コマンド)
httpd.conf
<VirtualHost 9.170.19.214>
ServerAdmin
[email protected]
DocumentRoot
/usr/IHSV7/htdocs/en_US2
ServerName
virtual.makuhari.japan.ibm.com
ErrorLog
/usr/IHSV7/logs/error_log2
CustomLog
/usr/IHSV7/logs/access_log2 common2
</VirtualHost>
‹
追加したIPアドレス
追加したIPアドレス
追加したIPアドレスで使用する
追加したIPアドレスで使用する
ホスト名
ホスト名
主な VirtualHost のディレクティブ
ServerAdmin
DocumentRoot
ServerName
ErrorLog
TransferLog
ServerAlias
NameVirtualHost
エラー発生時に生成される自動ページのメールアドレス
ファイルの提供元となるディレクトリ/ファイル名
ホスト名
サーバーで発生したエラーを記録するファイル名
サイトへのアクセスログを格納するファイル名
現在のVirtualHostとマッチ別名の一覧
Name-Base VirtualHostで使用するIPアドレス
6
Name-Base VirtualHostの設定
„
ネットワーク構成
‹
„
異なる名前が同じIPアドレスで名前解決できるかの確認
(ping [ホスト名] コマンド)
httpd.conf
NameVirtualHost
9.170.19.214
・・・・・
<VirtualHost 9.170.19.214>
ServerAdmin
[email protected]
DocumentRoot
/usr/IHSV7/htdocs/en_US2
ServerAlias
test2
ServerName
test.makuhari.japan.ibm.com
ErrorLog
/usr/IHSV7/logs/error_log2
CustomLog
/usr/IHSV7/logs/access_log2 common2
</VirtualHost>
‹
仮想ホストに使用するIPアドレス
追加したIPアドレス
仮想ホストに使用するIPアドレス
追加したIPアドレス
別ホスト名
別ホスト名
IPアドレスに「*」を設定することにより、複数のIPアドレスで同じサー
ビスを受けることが可能
NameVirtualHost
12.34.56.*
・・・
</VirtualHost 12.34.56.* >
7
考慮点
„
VirtualHost 定義にないリクエスト処理
‹
„
httpd.conf で指定した VirtualHost 定義に一致しないリクエストを受
け取った場合は、httpd.conf の中で最初に記述したVirtualHost で処
理される
ユーザーには意図しないコンテンツが送られてしまうことがある
Name-Base VirtualHost
‹
Name-Base VirtualHost では、仕様上、正しいSSL証明書を使用する
ことができない
Name-Base VirtualHostはSSL通信の設定を行うことができない
8
2. 性能情報の表示
9
機能概要(1/2)
„
mod_statusとは
‹
‹
‹
‹
サーバがどのくらいの性能で動作しているかを知る
現時点でのサーバの統計情報を読みやすいHTML 形式で表示
一定時間毎のリフレッシュが可能
頻繁にアクセスがあるサイトを管理する際に有用
¾
‹
致命的な状態になる前に、問題の発生を検知できる
内部的な情報が表示されるため、別途セキュリティ対策として、
mod_statusへのアクセス制御を行う
IHS
クライアント
HTTP
mod_statusの出力結果
ブラウザ
10
機能概要(2/2)
„
表示できる項目
‹
‹
‹
‹
‹
‹
‹
‹
リクエストを扱っているワーカーの数
アイドル (リクエストを扱っていない) ワーカーの数
各ワーカーの状態、ワーカーが扱ったリクエストの数、 ワーカーが
送った総バイト数 (*)
総アクセス数と総バイト数 (*)
サーバが起動もしくは再起動された時刻と動作している時間
平均の 1 秒あたりのリクエスト数、1 秒あたりの送られたバイト数、
リクエストあたりのバイト数 (*)
各ワーカーと Apache 全体で使用されている CPU の割合 (*)
現時点のホストと処理されているリクエスト (*)
(*)は、ExtendedStatusディレクティブをONに設定する必要がある
11
mod_statusの設定
„
httpd.conf
‹
status_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-status
Order Deny,Allow
Deny from all
Allow from makuhari.com
</Location>
</IfModule>
拡張ステータス情報の表示
拡張ステータス情報の表示
(デフォルト
(デフォルト on)
on)
ロケーションの設定
ロケーションの設定
(デフォルトAllow
(デフォルトAllow fromの設定なし)
fromの設定なし)
12
mod_statusの表示(1/2)
„
サーバの統計情報の表示
‹
„
http://<servername>/server-status/
アクセスするURLの変更
‹
httpd.conf
<Location /IHS-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from makuhari.com
</Location>
„
この設定の場合、URLは下記になる
この設定の場合、URLは下記になる
http://<servername>/IHS-status/
http://<servername>/IHS-status/
SetHandlerは、変更しない
SetHandlerは、変更しない
一定時間毎のリフレッシュ
‹
‹
http://<servername>/server-status?refresh=N
Nはリフレッシュを行うタイミング(秒)を指定
13
mod_statusの表示(2/2)
„
Machine Readable Status File
‹
‹
http://<servername>/server-status?auto
プログラム内で処理しやすいフォーマットで出力され、
log_server_statusを利用することで、定期的にテキストファイルへの
保存が可能
14
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
cls
‹
‹
待機状態のスレッド数
処理中のスレッド数
読み取り中のスレッド数
書き込み中のスレッド数
キープアライブ接続中のスレッド数
ログ出力中のスレッド数
DNSルックアップ中のスレッド数
終了処理中のスレッド数
IHS7.0ではデフォルトOnであり、600秒毎にError_logに出力
httpd.conf
LoadModule mpmstats_module modules/debug/mod_mpmstats.so
<IfModule mod_mpmstats.c>
ReportInterval 600
TrackModules On
</IfModule>
不要な場合は、ロードしない
不要な場合は、ロードしない
600秒毎にデータを取得
600秒毎にデータを取得
この情報を取得する要件がなく、(600秒毎ですが)パフォーマンスへの
影響を考慮する場合には、mod_mpmstatをロードしないで下さい 15
3. URLの書き換えとアクセス制御
16
機能概要
„
mod_rewriteとは
‹
‹
ブラウザから指示されたURLを内部的に書き換えるモジュール
様々な環境変数(ブラウザの種類、IPアドレス、ドメインネームなど)を
参照して、アクセス制限を実現
rewrite前のページ
httpd.conf 例
rewrite後のページ
LoadModule rewrite_module modules/mod_rewrite.so
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule /index.html /index_rewrite.html
</IfModule>
17
mod_rewriteの設定
„
httpd.conf
‹
rewrite_moduleのロード
LoadModule rewrite_module libexec/apache/mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so
・・・
<IfModule mod_rewrite.c>
RewriteEngine On
SetEnvIf Request_URI "test.html" nolog
RewriteLog "logs/rewrite_log"
RewriteLogLevel 1
RewriteRule ^/.*$ http://9.188.52.172/test.html
</IfModule>
‹
mod_rewriteの基本書式
¾
¾
¾
1.rewrite機能を有効にする
2.(オプション)rewriteの対象とするリクエストの条件(IPアドレスなど)を指定する
3.どのような書き換えを行うかを指示する
18
mod_rewriteのディレクティブ
„
主なディレクティブ
‹
RewriteEngine
¾
‹
RewriteLog
¾
‹
¾
テスト文字列と条件パターンを定義する
RewriteRuleの前にRewriteCond条件を挿入する。どの場合にRewriteRuleの命令を実行す
るか条件を記入する。条件はテスト文字列の値とマッチングをテストする正規表現である。
RewriteRule
¾
¾
‹
ファイルにログを出力する
RewriteCond
¾
‹
ランタイムrewriteエンジンを使用可能、不可能にする。onかoffを指定する
必要に応じて何度でも使用できる
命令を2度以上指定することが可能。ホスト名やディレクトリなど、書き換える内容を書く。オ
プション引数としてフラグを渡すことができる。フラグは1文字、または2文字で略記でも指定
できる。
主なフラグ
¾
¾
¾
¾
redirect | R
last | L
nocase | NC
chain | C
強制的にリダイレクトを行う
Rewrite処理を停止して、これ以上のRewriteのルールを割り当てない
大文字と小文字の区別しないようにする
次のRewriteRuleと連結する
19
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¥.137
RewriteRule /index.html /index_rewrite.html
</IfModule>
書き換える内容を示す。
書き換える内容を示す。
この設定では、/index.htmlのファイル要求に対し
この設定では、/index.htmlのファイル要求に対し
て、/index_rewrite.htmlと書き換える
て、/index_rewrite.htmlと書き換える
rewrite機能をONにする
rewrite機能をONにする
書き換えの対象となる条件を指定
書き換えの対象となる条件を指定
する。
する。
%{}の中は、条件に当てはまるか
%{}の中は、条件に当てはまるか
どうかの環境変数を入力する。
どうかの環境変数を入力する。
REMOTE_ADDRは、クライアント
REMOTE_ADDRは、クライアント
のIPアドレスに対して条件を指定
のIPアドレスに対して条件を指定
する。
する。
20
mod_rewriteの例(2/3)
„
要件
‹
常に同じドメイン名 (例:silver2.makuhari.japan.ibm.com)でアクセス
する
¾
„
別の形式(例:IPアドレス指定)でアクセスするとsilver2.makuhari.japan.ibm.com
に強制的にリダイレクトする
設定
‹
httpd.conf
RewriteEngine
RewriteCond
RewriteCond
RewriteCond
RewriteRule
RewriteCond
RewriteCond
RewriteRule
on
%{HTTP_HOST} !^silver2¥.makuhari¥.japan¥.ibm¥.com
%{HTTP_HOST} !^$
%{SERVER_PORT} !^80$
^/(.*) http://silver2.makuhari.japan.ibm.com:%{SERVER_PORT}/$1 [L,R]
%{HTTP_HOST} !^silver2¥.makuhari¥.japan¥.ibm¥.com
%{HTTP_HOST} !^$
^/(.*) http://silver2.makuhari.japan.ibm.com/$1 [L,R]
最初のRewriteRuleは、ポート番号80でsilver2.mkauhari.japana.ibm.comのアドレス以外のポート番
最初のRewriteRuleは、ポート番号80でsilver2.mkauhari.japana.ibm.comのアドレス以外のポート番
号もしくはアドレスでアクセスしたら、silver2.makuhari.japan.ibm.com:ポート番号に変換する。
号もしくはアドレスでアクセスしたら、silver2.makuhari.japan.ibm.com:ポート番号に変換する。
次のRewriteRuleは、silver2.mkauhari.japana.ibm.comのアドレス以外でアクセス
次のRewriteRuleは、silver2.mkauhari.japana.ibm.comのアドレス以外でアクセス したら、強
したら、強
制的にsilver2.mkauhari.japana.ibm.comに変換する
制的にsilver2.mkauhari.japana.ibm.comに変換する
21
mod_rewriteの例(3/3)
„
要件
‹
UserAgent毎に異なるページを表示する
¾
キャリア毎(携帯端末、ブラウザ)にページをディレクトリ単位で分ける
z
¾
http://www.ise.com/i/、http://www.ise.com/j/ 等
公開するアドレスを統一するため、キャリア毎にディレクトリに振り分ける
RequestURL: http://www.ise.com/
i-mode
Cellphone
EZweb
Cellphone
キャリア毎のuser-Agentヘッダ例
Request
/index.html
・i-mode
F502i DoCoMo/1.0/F502i…
Response
/i/index.htm
・EZWeb
UP.Browser/ …
Request
/index.html
・Internet Explorer
Mozilla/4.0 (compatible; MSIE 7.0; …
Response
/au/index.hdml
IHS
Internet Explorer
Request
/index.html
Response
/IE7.0/index.htm
22
【補足】 環境変数
„
主な環境変数 (%{}の中で指定)
‹
‹
‹
‹
‹
‹
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
環境変数一覧
HTTP headers:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
server internals:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
ブラウザの種類、バージョンなどの情報
リンクをたどって来た場合のリンク元URL
クッキーの情報
クライアントのIPアドレス
クライアントのドメインネーム
認証されたUSERの名前
connection & request:
REMOTE_ADDR
REMOTE_HOST
REMOTE_PORT
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
server internals:
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
specials:
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
HTTPS
23
【補足】 正規表現
„
主な正規表現
‹
.
[abc]
[^abc]
string1|string2
?
‹
*
‹
+
‹
^
$
¥
‹
‹
‹
‹
‹
‹
任意の一文字
a、b、cのうちのどれか一文字
a、b、c以外のどれか一文字
string1またはstring2
直前の文字の0、または1回
ab?cならac、abc
直前の文字の任意回
ab*cならac、abc、abbc・・・
直前の文字の任意回(一回以上)
ab+cならabc、abbc、abbbbc・・・
行頭
行末
ここの表現を、その文字そのものとして扱う
24
4. ログのカスタマイズ
25
ログのカスタマイズが有効なケース
„
どんな時にログをカスタマイズするか?
管理者
クライアント
特定IPアドレスからのアクセスは
特定IPアドレスからのアクセスは
ロギングしなくて良い
ロギングしなくて良い
マシンリソースに余裕がないので
マシンリソースに余裕がないので
できるだけログのファイルサイズを減らしたい
できるだけログのファイルサイズを減らしたい
画像ファイルへのアクセスは
画像ファイルへのアクセスは
ロギングしなくて良い
ロギングしなくて良い
Cookie
クライアント
Load
Balancer
Cookie
IHS
GIF
ログ
Cookie
ログ
WAS
クライアント
環境に合わせて
環境に合わせて
ログファイル名を変更したい
ログファイル名を変更したい
Cookieの内容を
Cookieの内容を
単体ログにロギングしたい
単体ログにロギングしたい
Cookie
26
関連モジュールとディレクティブ(1/2)
„
モジュール
‹
mod_log_config
¾
„
クライアントのリクエストを柔軟にログ収集する機能を提供する
ディレクティブ
‹
LogFormat
¾
ログの書式とそのニックネームを定義する
LogFormat "%h %l %u %t ¥"%r¥" %>s %b" common
‹
CustomLog
¾
ログファイルを定義し、使用する書式のニックネームを指定する
CustomLog logs/access_log common
‹
他にTransferLogディレクティブがあり、LogFormatと組み合わせて使
用することができる。できることは上記2つと同じ。
27
関連モジュールとディレクティブ(2/2)
„
モジュール
‹
mod_setenvif
¾
„
リクエストの特徴に基づいた環境変数の設定を可能にする
ディレクティブ
‹
SetEnvIf
¾
リクエストの属性に基づいて環境変数を設定する
SetEnvIf Request_URI "¥.gif$" object_is_image=gif
‹
BrowserMatch
¾
HTTP User-Agent に基づいて環境変数を設定する
BrowserMatch ^IMozilla browser=netscape
¾
SetEnvIfを使って以下の様に設定するのと同じ
SetEnvIf User-Agent ^Mozilla browser=netscape
28
ログファイルの書式(1/2)
„
デフォルトのログファイル書式
‹
Common Log Format (CLF) と呼ばれる以下の形式
¾
¾
各々のリクエストは1行で格納される
スペースによって区切られた各項目で構成
LogFormat "%h %l %u %t ¥"%r¥" %>s %b” common
CustomLog logs/access_log common
<access_log>
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET / HTTP/1.1" 200 3216
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /http_server_styles.css HTTP/1.1" 200 1184
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/odot.gif HTTP/1.1" 200 49
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/background.gif HTTP/1.1" 200 183099
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/administration.gif HTTP/1.1" 200 223
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/help.gif HTTP/1.1" 200 210
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/support.gif HTTP/1.1" 200 150
9.170.233.229 - - [11/Jun/2009:07:20:53 +0000] "GET /images/notes.gif HTTP/1.1" 200 170
9.170.233.229 - - [11/Jun/2009:07:20:54 +0000] "GET /images/foreground.gif HTTP/1.1" 200 53680
リモートホスト
リモートログ名
リクエストの最初の行
リモートユーザー
時刻
ステータスコード
レスポンスのバイト数
29
ログファイルの書式(2/2)
„
書式のカスタマイズ
‹
LogFormatディレクティブでログの書式とニックネームを指定する
¾
¾
¾
書式にはログファイルにそのまま書かれる文字列や、改行とタブを表すC言語形
式の制御文字”¥n”と”¥t”とを含めることができる
引用符とバックスラッシュはバックスラッシュでエスケープする必要がある
それぞれのリクエストの属性は”%”ディレクティブを使って取得する
z
指定できる”%”ディレクティブについては次ページ参照
LogFormat "%h %l %u %t ¥"%r¥" %>s %b %D ¥”%{User-Agent}i¥”" myformat
¾
”%”の直後に HTTP ステータスコードをカンマ区切りで指定することで、表示を制
限することができる
z
‹
例えば、”%400,500{User-agent}i”では、 400 と 500 番エラーでのみ User-agent を記録
し、他のステータスコードでは “-” という文字列を記録する
CustomLogディレクティブでログファイルのパスと書式を指定
¾
¾
ログファイルのパスを指定
書式はLogFormatディレクティブで定義したニックネームを指定
CustomLog logs/my_log myformat
30
[参考] 指定できる“%”ディレクティブ
%%
%a
%A
%B
%b
%{Foobar}C
%D
%{FOOBAR}e
%f
%h
%H
%{Foobar}i
%l
%m
%{Foobar}n
%{Foobar}o
%p
%P
%{format}P
%q
%r
%s
%t
%{format}t
%T
%u
%U
%v
%V
%X
%I
%O
パーセント記号
リモート IP アドレス
ローカル IP アドレス
レスポンスのバイト数。HTTP ヘッダは除く。
レスポンスのバイト数。HTTP ヘッダは除く。CLF 書式。 すなわち、1 バイトも送られなかったときは 0 ではなく、 '-' になる
サーバに送られたリクエスト中のクッキー Foobar の値
リクエストを処理するのにかかった時間、マイクロ秒単位
環境変数 FOOBAR の内容
ファイル名
リモートホスト
リクエストプロトコル
サーバに送られたリクエストの Foobar: ヘッダの内容
(identd からもし提供されていれば) リモートログ名。
これは mod_ident がサーバに存在して、 IdentityCheck ディレクティブが On に設定されていない限り、 - になる
リクエストメソッド
他のモジュールからのメモ Foobar の内容
応答の Foobar: ヘッダの内容
リクエストを扱っているサーバの正式なポート
リクエストを扱った子プロセスのプロセス ID
リクエストを扱ったワーカーのプロセス ID かスレッド ID。 format として有効な値は pid, tid, hextid です。
hextid を使うには APR 1.2.0 以降が必要です。
問い合せ文字列 (存在する場合は前に ? が追加される。 そうでない場合は空文字列)
リクエストの最初の行
ステータス。内部でリダイレクトされたリクエストは、元々の リクエストのステータス --- 最後のステータスは %>s
リクエストを受付けた時刻。 CLF の時刻の書式 (標準の英語の書式)
format で与えられた書式による時刻。format は strftime (3) の 書式である必要がある。(地域化されている可能性がある)
リクエストを扱うのにかかった時間、秒単位
リモートユーザ (認証によるもの。ステータス (%s) が 401 のときは意味がないものである可能性がある)
リクエストされた URL パス。クエリ文字列は含まない
リクエストを扱っているサーバの正式な ServerName
UseCanonicalName の設定によるサーバ名
応答が完了したときの接続ステータス:
X = 応答が完了する前に接続が異常終了
+ = 応答が送られた後に接続を持続することが可能
- = 応答が送られた後に接続が切られる
リクエストとヘッダを含む、受け取ったバイト数。 0 にはならない。 これを使用するためには mod_logio が必要
ヘッダを含む、送信したバイト数。0 にはならない。 これを使用するためには mod_logio が必要
31
環境変数
„
リクエストの属性に基づいて環境変数を指定
‹
以下の3つの属性が指定可能
¾
HTTPリクエストヘッダフィールド
z
¾
以下のリクエストの一部のいずれか
z
z
z
z
z
z
¾
‹
‹
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 のスキームとホストの後の部分
既にリクエストに関連付けられている環境変数
属性の指定には正規表現を使用する
環境変数には値を設定することも可能
SetEnvIf Request_URI "¥.gif$" object_is_image=gif
SetEnvIf Request_URI "¥.jpg$" object_is_image=jpg
„
CustomLogディレクティブでロギングする対象のリクエストを指定する
‹
環境変数が合致しないものをロギング
CustomLog logs/access_log common env=!object_is_image
‹
環境変数が合致するもののみをロギング
CustomLog logs/image_log common env=object_is_image
32
ログ設定例(1/3)
„
レスポンスタイムを取得したい
LogFormat “%h %l %u %t ¥”%r¥” %>s %b” common
LogFormat “%h %l %u %t ¥”%r¥” %>s %b %D” resptime
ニックネーム
#CustomLog logs/access_log common
CustomLog logs/access_log resptime
デフォルトの
CLF形式のログ
%Dを使ってレスポンスタイムを
取得する書式を新たに定義
新たに定義した書式で
ログを記録
„
画像ファイルへのアクセスを記録しない
LogFormat “%h %l %u %t ¥”%r¥” %>s %b” common
画像ファイル(.gif と .jpg)への
リクエストに環境変数をセット
SetEnvIf Request_URI “¥.gif$” image=gif 環境変数
SetEnvIf Request_URI “¥.jpg$” image=jpg
CustomLog logs/access_log common env=!image
image環境変数のないリクエストを
アクセスをログに記録
33
ログ設定例(2/3)
„
特定IPからのアクセスを記録しない
LogFormat “%h %l %u %t ¥”%r¥” %>s %b” common
SetEnvIf Remote_Addr 9¥.188¥.52¥.73 deny_ip
拒否するIPからのアクセスに
環境変数をセット
CustomLog logs/access_log common env=!deny_ip
„
負荷分散装置からの監視アクセスを別のログに記録する
LogFormat “%h %l %u %t ¥”%r¥” %>s %b” common
BrowserMatch IBM_Load_Balancer_HTTP_Advisor LB
CustomLog logs/access_log common env=!LB
CustomLog logs/advisor_log common env=LB
Load BalancerのUser-Agentからの
アクセスに環境変数をセット
LB以外のアクセスを記録-
LBからのアクセスを記録
34
ログ設定例(3/3)
„
負荷分散装置やプロキシーが送信するクライアントアドレスを記録する
‹
NAT転送をする負荷分散装置やプロキシーを経由するリクエストは、リモートホストが
負荷分散装置やプロキシーとなるために実際のクライアントIPが記録できない
クライアント
NAT
Proxy
IHS
IP
IP
IP
負荷分散装置やプロキシーの
IPアドレスが記録される
‹
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” common
LogFormat "%{X-Forwarded-For}i %l %u %t ¥"%r¥" %>s %b" common
CustomLog logs/access_log common
35
5. IHS管理サーバー
36
機能概要
„
IHS 管理サーバーとは
‹
‹
„
httpd.confを編集するhttpdのプロセス
admin.confにて定義され、別のポート(:8008)でサービスを行う
IHSをWebSphere管理下に統合すると
‹
‹
Basic認証を行った上で、デプロイメント・マネージャーから処理要求を
受け付ける
セキュリティー要件等により、IHSとWASをリモート(別筐体)構成とした
際に、IHS管理サーバーを経由してWASから以下を行うことが可能
¾
¾
¾
IHSの状況モニター
IHSプラグイン構成ファイルの生成・伝搬
IHSの始動・停止
37
構成手順(1/2)
„
IHS管理サーバのインストール
‹
‹
WASのランチパッドから、IHSのインストール・ウィザードを起動
ウィザードに従ってインストール
¾
¾
¾
IHSのポート番号とIHS管理サーバーのポート番号を入力
IHS管理サーバーのセットアップ、ユーザーIDおよびグループの作成
IHS管理サーバーの認証用ユーザーIDの作成
38
構成手順(2/2)
„
構成ファイルと認証ファイルのアクセス権限の付与
‹
AIX®、HP-UX、Linux® 、 Solaris
# <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管理サーバーのアクセス許可
‹
‹
AIX、HP-UX、Linux、Solaris 、 Windows
管理コンソールにて、リモート Web サーバーのプロパティーのユー
ザー ID フィールドに入力したユーザー IDを指定する
# <IHS_INSTALL_ROOT>/bin/htpasswd
-cm <IHS_INSTALL_ROOT>/conf/admin.conf [ユーザーID]
39
6. WebSphere管理下に統合
40
機能概要
„
WebSphere管理コンソールによるWebサーバーの管理
‹
‹
‹
‹
‹
始動・停止
状況モニター
構成ファイルの表示・編集
プラグイン構成ファイルの表示・編集
プラグイン構成ファイルの生成・伝搬
41
構成手順(1/4)
„
IHS7.0 のインストール
‹
‹
WASのランチパッドから、IHSのインストール・ウィザードを起動
ウィザードに従ってインストール
¾
¾
IHSのポート番号とIHS管理サーバーのポート番号を入力
Windowsの場合は、ウィンドウズ・サービスへの登録内容を入力
42
構成手順(2/4)
„
プラグインのインストール
‹
‹
WASのランチパッドからプラグインのインストール・ウィザードを起動
ウィザードに従ってインストール
¾
¾
¾
構成するWebサーバーを指定
Webサーバー構成ファイルとポート番号(デフォルト80)を入力
Webサーバー定義名を入力
43
構成手順(3/4)
„
IHS7.0 のWebSphereセルへの統合
‹
‹
リモート構成の場合、IHS管理サーバーを起動
WebSphere管理コンソールからWebサーバーを構成
¾
Webサーバーの選択とプロパティの入力
リモート構成の場合
リモート構成の場合
サーバー名の入力
サーバー名の入力
44
構成手順(4/4)
„
コマンドによるIHS7.0 のWebSphereセルへの統合
‹
‹
‹
リモート構成の場合、 IHS管理サーバーを起動
デプロイメント・マネージャー、ノード・エージェントを起動
Webサーバー構成用のスクリプトからWebサーバーを構成
# 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.
45
導入手順の詳細は、「WebSphere Application Server V7.0 導入ガイド」をご確認下さい
Webサーバーの管理(1/2)
„
WebSphere管理コンソールによるWebサーバーの管理
‹
WebサーバーがIHSの場合
¾
IHSがWASの管理対象/管理対象外ノード上にある場合
z
z
z
z
z
IHSの状況モニター
IHSプラグイン構成ファイルの生成・伝搬
IHSのエラー・ログおよびアクセス・ログ表示
IHSの始動・停止
IHS構成ファイルの表示・編集
プラグイン構成ファイル
プラグイン構成ファイル
の生成・更新、伝搬
の生成・更新、伝搬
Webサーバー定義
Webサーバー定義
の作成/削除
の作成/削除
Webサーバーの
Webサーバーの
始動/停止・終了
始動/停止・終了
46
Webサーバーの管理(2/2)
„
WebSphere管理コンソールによるWebサーバーの管理
‹
WebサーバーがIHS以外の場合
¾
WebサーバーがWASの管理対象ノード上にある場合
z
z
¾
WebサーバーがWASの管理対象外ノード上にある場合
z
z
‹
Webサーバーの状況モニター
Webサーバー・プラグイン構成ファイルの生成・伝搬
Webサーバーの状況モニター
Webサーバー・プラグイン構成ファイルの生成のみ
選択可能なWebサーバー
Webサーバー作成時に指定できるタイプ
47
リモートWebサーバーのトポロジー
・ WebサーバーがIHS、管理サーバー経由の場合
ノード
DM
<管理コンソール>
プラグインの生成
Webサーバー・ノード
管理サーバー
IHS
Plugin構成ファイル
構成
リポジトリー
セル
Plugin構成ファイル
プラグインの伝搬
状況のモニター
プラグイン構成ファイルの生成・伝搬
IHSの起動・停止
・ WebサーバーがIHS以外、NodeAgent経由の場合
セル
Webサーバー・ノード
ノード
DM
<管理コンソール>
プラグインの生成
NA
Webサーバー
Plugin構成ファイル
構成
リポジトリー
*IHS以外
Plugin構成ファイル
プラグインの伝搬
状況のモニター
プラグイン構成の生成・伝搬
・ WebサーバーがIHS以外、NodeAgentを経由しない場合
Webサーバー・ノード
ノード
DM
<管理コンソール>
Webサーバー
Plugin構成ファイル
構成
リポジトリー
プラグインの生成
セル
Plugin構成ファイル
手動コピーが必要
*IHS以外
状況のモニター
48
参考文献
49
参考文献
„
Apache HTTP サーバ ドキュメンテーション
‹
Apache HTTP サーバ バージョン 2.2 ドキュメント
¾
„
Information Center
‹
IBM 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 解説
¾
„
http://httpd.apache.org/docs/2.2/
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
50
Fly UP