サーバー処理のカスタマイズ

このトピックでは、サーバー側インクルードを使用して、CGI プログラムおよびクライアントに引き渡される HTML 文書に情報を挿入する方法について説明します。サーバーのエラー・メッセージおよびリソース・マッピングのカスタマイズについても説明しています。

サーバー側インクルード

サーバー側インクルードを使用すると、サーバーが起点サーバーとして機能する (すなわち代理オブジェクトでもキャッシュされたオブジェクトでもない) 場合に、サーバーが CGI プログラムおよびクライアントに送信する HTML 文書に情報を追加することができます。クライアントに送信できる情報の種類としては、現在日付、ファイルのサイズ、ファイルに加えられた最終変更日付などがあります。このセクションでは、サーバー側インクルードのためのコマンド形式について記述し、サーバー側インクルード・コマンドを CGI プログラムおよび HTML 文書で機能させる方法について説明します。サーバー側インクルードを使用して、エラー・ページをカスタマイズすることもできます。

サーバー側インクルードに関する考慮事項

サーバー側インクルードをサーバーで使用する前に、パフォーマンス、セキュリティー、およびリスクなどの問題を考慮します。

サーバー側インクルードの構成

サーバー側インクルードを使用可能にするには、「構成および管理」フォームで、「サーバー構成–>基本設定」を選択します。このフォ ームを使用して、以下のサーバー側インクルード・タイプの中から受け入れるタイプを指定します。

また、このフォームを使用して、他のファイル・タイプに加えて、テキストまたは HTML 文書 のサーバー側インクルード処理を実行するかどうかも指定します。

さらに、include に使用するファイル拡張子が認識されるようにします。 そのためには、「構成および管理」フォームで、「サーバー構成–>MIME タイプ およびエンコード」を選択し、「MIME タイプ」フォームを 使用します。shtml および html の拡張子がデフォルトで認識されることに 注意してください。

プロキシー構成ファイル内のディレクティブを編集してサーバー側インクルードのためにサーバーを構成するには、次のディレクティブのそれぞれの該当するセクションを参照してください。

サーバー側インクルードの形式

インクルード・コマンドは、コメントとして HTML 文書または CGI プログラムに組み込む必要があります。 そのコマンドの形式は、以下のとおりです。

<!--#directive tag=value ... --> 
or 
<!--#directive tag="value" ... -->  

値を囲む引用符は任意指定ですが、値にスペースが含まれる場合は必要です。

サーバー側インクルードのディレクティブ

このセクションでは、サーバー側インクルードのためにサーバーによって受け入れられるディレクティブについて説明します。(これらのディレクティブを、プロキシー構成ファイルのディレクティブ (付録B. 構成ファイル・ディレクティブで説明している) と混同しないようにしてください)

config — ファイル処理を制御する

このディレクティブを使用して、ファイル処理のある局面を制御します。有効なタグは、cmntmsgerrmsgsizefmt、および timefmt です。

cmntmsg
このタグを使用して、他のディレクティブにより追加されるコメントの先頭より前にくるメッセージを指定します。ディレクティブの指定と "-->"の間にテキストを含むディレクティブの場合、そのテキストがコメントとして扱われ、サーバーがクライアントに送信するファイルに追加されます。

例:

<!--#config cmntmsg="[This is a comment]" -->
<!-- #echo var="  " extra text -->

結果: <!--[This is a comment] extra text -->

デフォルト: [the following was extra in the directive]

errmsg
このタグを使用して、ファイルの処理中にエラーが起きた場合にクライアントに送信されるメッセージを指定します。 このメッセージは、サーバーのエラー・ログに記録されます。

例:

<!-- #config errmsg="[An error occurred]" -->

デフォルト: "[An error occurred while processing this directive]"

sizefmt
このタグを使用して、ファイル・サイズが表示されるときのフォーマットを指定します。次の例では、bytes はバイト数を表示するために使用される値で、abbrev は K バイト数または M バイト数を表示するために使用される値です。

例 1:

<!--#config sizefmt=bytes -->
<!--#fsize file=foo.html -->

結果: 1024

例 2:

<!--#config sizefmt=abbrev -->
<!--#fsize file=foo.html -->

結果: 1K

デフォルト: "abbrev"

timefmt
このタグを使用して、日付を提供するために使用されるフォーマットを指定します。

例:

<!--#config timefmt="%D %T" -->
<!--#flastmod file=foo.html -->

結果: "10/18/95 12:05:33"

デフォルト: "%a, %d %b %Y %T %Z"

以下の strftime() 形式が、timefmt タグで有効です。

指定子 意味
%% % で置換する。
%a 省略された曜日名で置換する。
%A 完全な (省略なし) 曜日名で置換する。
%b 省略された月名で置換する。
%B 完全な (省略なし) 月名で置換する。
%c 日時で置換する。
%C 世紀数 (100 で割って切り捨てた数字) で置換する。
%d 日付で置換する (01 から 31)。
%D 日付を %m/%d/%y として挿入する。
%e 月数を 10 進数で挿入する (01 から 12) (C POSIX に限っては、2 文字の、右寄せされ、ブランクで埋められるフィールドです)。
%E[cCxyY] 代替日付 / 時刻形式が使用できない場合、%E 記述子は、非拡張の対応する記述子にマップされる (例えば、%EC は %C にマップされる)。
%Ec 代替日時表示で置換する。
%EC 代替表示の基本となる年 (期間) の名前で置換する。
%Ex 代替日付表示で置換する。
%EX 代替時間表示で置換する。
%Ey 代替表示の %EC (年のみ) からのオフセットで置換する。
%EY 完全な (省略なし) 代替年表示で置換する。
%h 省略された月名で置換する (%b と同じ)。
%H 10 進数 (00 から 23) の時刻 (24 時間時計) で置換する。
%I 10 進数 (00 から 12) の時刻 (12 時間時計) で置換する。
%j 年間通算日で置換する (001 から 366)。
%m 月で置換する (01 から 12)。
%M 分で置換する (00 から 59)。
%n 改行で置換する。
%O[deHlmMSUwWy] 代替日付 / 時刻形式が使用できない場合、%O 記述子は、非拡張の対応する記述子にマップされる (例えば、%Od は %d にマップされる)。
%Od 代替数値シンボルを使用して、月の日付で置換する。必要に応じて、ゼロを示す代替シンボルがある場合は先行ゼロ、ない場合は先行スペースによって埋められる。
%Oe 代替数値シンボルを使用して、必要であれば先行スペースで埋めて、月の日付で置換する。
%OH 代替数値シンボルを使用して、時間 (24 時間時計) で置換する。
%OI 代替数値シンボルを使用して、時間 (12 時間時計) で置換する。
%Om 代替数値シンボルを使用して月で置換する。
%OM 代替数値シンボルを使用して分で置換する。
%OS 代替数値シンボルを使用して秒で置換する。
%OU 代替数値シンボルを使用して、年間通算週数 (日曜日を週の第 1 日とし、規則は %U と同じ) で置換する。
%Ow 代替数値シンボルを使用して、曜日 (日曜日 = 0) で置換する。
%OW 代替数値シンボルを使用して、年間通算週数で置換する (月曜日が最初の日)。
%Oy 代替表示の年 (%C からのオフセット) で、代替数値シンボルを使用して置換する。
%p AM または PM と同等のもので置換する。
%r %I:%M:%S %p と同等のストリングで置換する。
%R 24 時間表記の時刻で置換する (%H:%M)。
%S 秒で置換する (00 から 61)。
%t タブで置換する。
%T %H:%M:%S と同等のストリングで置換する。
%u 10 進数の曜日で置換する (1 から 7)。1 は月曜日を表す。
%U 年間通算週数 (00 から 53) で置換する。日曜日を週の最初の日とする。
%V 年間通算週数 (01 から 53) で置換する。月曜日を週の最初の日とする。
%w 曜日で置換する (0 から 6)。日曜日は 0 になる。
%W 年間通算週数 (00 から 53) で置換する。月曜日を週の最初の日とする。
%x 適切な日付表示で置換する。
%X 適切な時間表示で置換する。
%y 2 桁の年数値と世紀で置換する。
%Y 完全な 4 桁の年数値で置換する。
%Z 時間帯の名前で置換する。時間帯が分からない場合は、文字を何も指定しない。

オペレーティング・システムの構成によって、月名と年が完全表記であるか省略表記であるかが決まります。

echo — 可変値を表示する

このディレクティブは、var タグを使用して指定された環境変数の値を表示するために使用します。 変数が検出されない場合は、(None) が表示されます。 echo は、set または global ディレクティブによって設定された値を表示することもできます。 以下のような環境変数を表示することができます。

DATE_GMT
グリニッジ標準時による現在の日付および時刻。 この変数の形式設定は、config timefmt ディレクティブを使用して定義されます。
DATE_LOCAL
現在の日付と地方時。 この変数の形式設定は、config timefmt ディレクティブを使用して定義されます。
DOCUMENT_NAME
最上位の文書の名前です。HTML が CGI によって生成された場合、この変数には CGI の名前が入ります。
DOCUMENT_URI
照会ストリングのない、クライアントが要求した完全 URL。
LAST_MODIFIED
現在の文書が最後に変更されたときの日付と時刻。 この変数の形式設定は、config timefmt ディレクティブを使用して定義されます。
QUERY_STRING_UNESCAPED
クライアントによって送信された検索照会。 これは、HTML が CGI によって生成された場合を除いて、未定義です。
SSI_DIR
SSI_ROOT に対応する現在のファイルのパス。現行ファイルが SSI_ROOT にある場合、この値は "/" になります。
SSI_FILE
現行ファイルのファイル名。
SSI_INCLUDE
現行ファイルを検索した include コマンドで使用された値。 これは、最上位ファイルには定義されていません。
SSI_PARENT
SSI_ROOT に関連して、現行ファイルを検索した include コマンドが入っているファイルのパスとファイル名。
SSI_ROOT
最上位ファイルのパス。 すべてのインクルード要求は、このディレクトリーまたはこのディレクトリーの子ディレクトリーになければなりません。

例:

<!--#echo var=SSI_DIR -->

exec — CGI プログラムを指定する

このディレクティブを使用して、CGI プログラムの出力を組み込みます。exec ディレクティブは、CGI が出力するすべての HTTP ヘッダーを廃棄します。ただし、以下のものは除きます

CONTENT-TYPE
他の includes の出力の本文を構文解析するかを示します。
CONTENT-ENCODING
EBCDIC から ASCII への変換を行う必要があるかを判別します。
LAST-MODIFIED
現在の値が指定の値よりも新しくない限り、Last-Modified ヘッダーの値を置換します。

cgi — CGI プログラム URL を指定する

このディレクティブを使用して、CGI プログラムの URL を指定します。

この例では、program は実行される CGI プログラムで、path_info および query_string は環境変数としてプログラムに渡される 1 つ以上のパラメーターを表します。

<!--#exec cgi="/cgi-bin/program/path_info?query_string" -->

次の例は、変数の使用を示すものです。

<!--#exec cgi="&path;&cgiprog;&pathinfo;&querystring;" -->

flastmod — 文書が最後に変更された日付および時刻を表示する

このディレクティブを使用して、文書が最後に変更された日付および時刻を表示します。この変数の形式設定は、config timefmt ディレクティブによって定義されます。file および virtual タグは、このディレクティブで有効であり、 その意味は次のように定義されます。

ディレクティブ形式:

<!--#flastmod file="/path/file" --> 
<!--#flastmod virtual="/path/file" -->

file
このタグを使用して、ファイルの名前を指定します。flastmodfsize、および include で、前に '/' が付いている場合、fileSSI_ROOT に対応するものと想定されます。 そうでなければ、SSI_DIR と対応します。指定されたファイルは、SSI_ROOT またはそのサブディレクトリーのいずれかに存在していなければなりません。例えば、次のとおりです。
<!--#flastmod file="/path/file" -->
virtual
このタグを使用して、文書への仮想パスの URL を指定します。flastmodfsize、および include の場合、virtual は常にサーバーのマッピング・ディレクティブを介して渡されます。例えば、次のとおりです。
<!--#flastmod virtual="/path/file" -->

例:

<!--#flastmod file="foo.html" -->

結果: 12May96

fsize — ファイル・サイズを表示する

このディレクティブを使用して、指定したファイルのサイズを表示します。この変数の形式設定は、config sizefmt ディレクティブによって定義されます。file および virtual タグは、このディレクティブで有効で、その意味は前に flastmod ディレクティブに定義したものと同じです。

例:

<!--#fsize file="/path/file" -->
<!--#fsize virtual="/path/file" -->

結果: 1K

global — グローバル変数を定義する

このディレクティブを使用して、このファイルまたは任意のインクルード・ファイルによって後からエコーすることができる、グローバル変数を定義します。

例:

<!--#global var=VariableName value="SomeValue" -->

例えば、仮想境界にわたる親文書を参照するために、グローバル変数 DOCUMENT_URI を設定する必要があります。子文書内のグローバル変数も参照する必要があります。 次の例は、親文書に挿入する必要がある HTML コーディングを示したものです。

<!--#global var="PARENT_URI" value=&DOCUMENT_URI; -->

次の例は、子文書に挿入する必要がある HTML コーディングを示したものです。

<!--#flastmod virtual=&PARENT_URI; -->

include — 文書を出力に組み込む

このディレクティブを使用して、文書からのテキストを出力に組み込みます。file および virtual タグは、このディレクティブで有効であり、その意味は flastmod ディレクティブの場合に上記に定義したものと同じです。

set — 変数がエコーされるように設定する

このディレクティブを使用して、このファイルだけが後からエコーすることができる変数を設定します。

例:

  <!--#set var="Variable 2" value="AnotherValue" -->

ディレクティブを定義している間に、value 内にストリングをエコーすることができます。例えば、次のとおりです。

<!--#include file="&filename;" -->

変数: サーバー側 set ディレクティブは、一般的に echo ディレクティブが続いているので、set 変数を検索し、その変数が見つかると、エコーして、その機能を実行します。これには、変数に対する複数参照を含めることができます。サーバー側 set によって、既に設定されている変数をエコーすることもできます。set 変数が見つからない場合は、何も表示されません。

サーバー側 set は、サーバー側 include ディレクティブ内部の変数参照が見つかると、サーバー 側でこれを解決しようとします。次の例の 2 行目では、サーバー側変数 &index; がストリング var とともに使用され、変数名 var1 が構成されます。その後で &ecirc; 中の & をエスケープして変数 &var1; に値が割り当てられるので、変数として認識されなくなります。代わりに、 値 fr&ecirc;d または e の上に 曲折アクセント記号のついた fred を作成するためのストリングとして使用されます。 変数 &ecirc; はクライアント側変数です。

<!--#set var="index" value="1" --> 
<!--#set var="var&index;" value="fr\&ecirc;d" -->
<!--#echo var="var1" -->

エスケープできる文字 (エスケープ変数と呼ばれる文字) は、前に円記号 (¥) が付き、 次のようなものがあります。

文字 意味
¥a アラート (ベル)
¥b バックスペース
¥f 用紙送り (改ページ)
¥n 改行
¥r 改行復帰
¥t 水平タブ
¥v 垂直タブ
\' 単一引用符
\" 二重引用符
\? 疑問符 (?)
\\ 円記号
\- ハイフン
\. ピリオド
\& アンパーサンド

エラー・メッセージのカスタマイズ

Caching Proxy から戻されるエラー・メッセージをカスタマイズして、特定のエラー状態に対応する 特定のメッセージを定義することができます。「構成および管理」フォームで、「サーバー構成–>エラー・メッセージのカスタマイズ」を選択します。 このフォームを使用して、エラー状態を選択し、その状態に使用する 特定の HTML ファイルを指定します。

プロキシー構成ファイル中のディレクティブを編集してエラー・メッセージをカスタマイズするには、ディレクティブの該当するセクション (ErrorPage - 特定のエラー条件にカスタマイズされたメッセージを指定する) を参照してください。

Real Time Streaming Protocol (RTSP) リダイレクト

これは、リバース・プロキシー構成にのみ適用されます。

WebSphere® Application Server, バージョン 8.0 では、RTSP リダイレクターという形でストリーミング・メディアのサポートを導入しています。 RTSP により Caching Proxy は、メディア・プレイヤーとの最初の接点として働き、メディア・プレイヤーの要求を該当するプロキシー・サーバーへ、または要求されたメディア・コンテンツを提供するコンテンツ・サーバーへリダイレクトすることができます。

RTSP (Real Time Streaming Protocol) は RFC 2326 に定義されています。これは、データ・ストリームを制御するためのインターネット標準プロトコルです。これには、ストリームを 送達する テクノロジーは含まれていませんが、ビデオやオーディオの再生とは無関係なデータ・ストリームを 制御するために使用できる十分な柔軟性があります。

RTSP のリダイレクトについて

RTSP リダイレクト機能によって、Caching Proxy は、RTSP で制御されるすべてのストリーミング・ メディア・セッションについて要求をリダイレクトできます。そのセッションには、以下のタイプのメディアが含まれます。

RTSP ポート (通常は 554) でプロキシー・サーバーに接続するよう構成できるどのプレイヤーも、Caching Proxy でこのフレームワークを使用して、その要求を RTSP リダイレクターに処理させることができます。

RTSP リダイレクターは、プロキシー・メディア・プレゼンテーションをキャッシュに格納したり送信したりしません。RTSP リダイレクターをサード・パーティー製のストリーミング・メディア・サーバーと一緒に使用し、これらの機能のいずれかまたは両方を提供する必要があります。RTSP リダイレクターを備えた Caching Proxy は、1 つ以上の RTSP プロキシー・サーバーにネットワーク・アクセスができることが必要です。

RTSP の制限

この機能には、以下の制約事項があります。

現在、RealNetworks のテクノロジーだけがサポートされています。これらのテクノロジーには、RealProxy プロキシー・サーバー、RealServer 起点サーバー、RealPlayer メディア・プレイヤーなどがあります。

RTSP の機能強化

従来、RTSP リダイレクターには、どの URL についても同じ起点サーバーに向けられたすべての要求が同じ方法でリダイレクトされるという制限がありました。要求された URL のファイル名またはその他の部分を基にしたリダイレクトは不可能でした。この制限はもはや適用されません。RTSP リダイレクターは、Caching Proxy 構成ファイルで設定されたしきい値 (rtsp_proxy_threshold) とともに、受信した要求からの完全 URL を使用して、クライアント要求を起点サーバーとプロキシー・サーバーのどちらにリダイレクトするかを判別するようになりました。同じ 起点サーバーへの要求は、個別に処理されるようになりました。

RTSP リダイレクトの構成

RTSP リダイレクトを制御するために、以下の構成ファイル・ディレクティブを使用します。これらのディレクティブの設定値は、サーバーを再始動してもリフレッシュされません。これらのディレクティブの変更を有効にするには、サーバーを完全に停止したあと、再始動する必要が あります。