このドキュメントはアーカイブされており、メンテナンスされていません。

付録 B : 自動プロキシ構成スクリプトの例

以下の 10 種類のスクリプトでは、自動プロキシ構成 (.pac) ファイルの JavaScript または Microsoft® JScript® での例を示します。 「自動構成、自動プロキシ、および自動検出の使用」で説明しているように、.pac ファイルを使用して、ユーザーのブラウザーからの URL 要求に基づいてプロキシを自動的に構成できます。

各スクリプトは、FindProxyForURL(<url>, <host>) 関数から構成されます。<url> はアクセスする完全な URL であり、<host> はこの URL から抽出されたホスト名を意味します。 これらのスクリプトを使用するには、プレースホルダーのプロキシ サーバー名、ポート番号 (通常は 80)、および IP アドレスを変更して、組織内の実際の名前、番号、およびアドレスを指すようにする必要があります。

noteNote
これらのスクリプトで使用される isInNetisResolvable、および dnsResolve の各関数では、ドメイン ネーム システム (DNS) サーバーに対して照会を実行します。

スクリプト例の一覧を以下に示します。

例 1 : ローカル ホストは直接接続し、他のホストはすべてプロキシを使用して接続する

次の関数では、ホスト名がローカル ホストかどうかを検査し、ローカル ホストの場合は直接接続であるかどうかを検査します。 ホスト名がローカル ホストでない場合は、プロキシ サーバー (<proxy>) を経由して接続します。

function FindProxyForURL(url, host)

{

if (isPlainHostName(host))

return "DIRECT";

else

return "PROXY proxy:80";

}

isPlainHostName 関数では、ホスト名にドット (ピリオド) が含まれているかどうかを調べます。 含まれている場合は FALSE (偽)、含まれていない場合は TRUE (真) を返します。

例 2 : ファイアウォールの内側にあるホストは直接接続し、外側にあるローカル サーバーはプロキシを使用して接続する

次の関数では、ホスト名が "プレーンな" ホスト名 (ドメイン名が含まれていない) か、または特定のドメイン (<.company.com> など) の一部で、さらにテキスト "www" または "home" が含まれていないかどうかを検査します。

function FindProxyForURL(url, host)

{

if ((isPlainHostName(host) ||

dnsDomainIs(host, ".company.com")) &&

!localHostOrDomainIs(host, "www.company.com") &&

!localHostOrDomainIs(host, "home.company.com"))

return "DIRECT";

else return "PROXY proxy:80";

}

noteNote
localHostOrDomainIs 関数は、ローカル ドメイン内の URL に対してのみ実行されます。 dnsDomainIs 関数では、ホスト名のドメインが指定されたドメインと一致する場合に TRUE (真) を返します。

例 3 : ホスト名の名前解決が可能な場合は直接接続し、不可能な場合はプロキシを使用して接続する

次の関数では、DNS サーバーに受け渡したホスト名の解決を要求します。 DNS サーバーがこのホスト名を解決できる場合は、直接接続が確立されます。 解決できない場合は、<proxy> を使用して接続されます。 このスクリプトは、内部 DNS サーバーを使用して内部のすべてのホスト名を解決する場合に役立ちます。

function FindProxyForURL(url, host)

{

if (isResolvable(host))

return "DIRECT";

else

return "PROXY proxy:80";

}

noteNote
このスクリプトで使用される isResolvable 関数では、DNS サーバーに対して照会を実行します。

例 4 : 指定されたサブネット内にホストが存在する場合は直接接続し、存在しない場合はプロキシを使用して接続する

次の関数では、指定された IP アドレスのパターンおよびマスクをホスト名と比較します。 この関数は、サブネット内の特定のホストには直接接続し、他のホストにはプロキシを使用して接続する必要がある場合に役立ちます。

function FindProxyForURL(url, host)

{

if (isInNet(host, "999.99.9.9", "255.0.255.0"))

return "DIRECT";

else

return "PROXY proxy:80";

}

isInNet(<host>, <pattern>, <mask>) 関数は、<host> IP アドレスが指定された <pattern> (<999.99.9.9> など) に一致する場合は、TRUE (真) を返します。 この <mask> では、IP アドレスのどの部分が一致するかを示します (255= 一致、0= 無視)。

noteNote
このスクリプトで使用される isInNet 関数では、DNS サーバーに対して照会を実行します。

例 5 : ホスト ドメインに基づいて接続の種類を決定する

次の関数では、ホストがローカルの場合、直接接続を指定します。 ホストがローカルでない場合は、この関数では、使用するプロキシ (<comproxy>、<eduproxy>、または <proxy>) をホスト ドメインに基づいて決定します。 この関数は、ホスト ドメイン名がプロキシ選択の基準の 1 つである場合に役立ちます。

function FindProxyForURL(url, host)

{

if (isPlainHostName(host))

return "DIRECT";

else if (shExpMatch(host, "*.com"))

return "PROXY comproxy:80";

else if (shExpMatch(host, "*.edu"))

return "PROXY eduproxy:80";

else

return "PROXY proxy";

}

shExpMatch(<str>, <shexp>) 関数は、<str> が <shexp> のシェル式のパターンに一致する場合は、TRUE (真) を返します。

例 6 : 使用されるプロトコルに基づいて接続の種類を決定する

次の関数は、使用されているプロトコルを抽出し、それに従ってプロキシ サーバーを選択します (<proxy>、<fproxy>、<gproxy>、または <secproxy>)。 一致するプロトコルがない場合は、直接接続します。 この関数は、使用されているプロトコルがプロキシ選択の基準の 1 つである場合に役立ちます。

function FindProxyForURL(url, host)

{

if (url.substring(0, 5) == "http:") {

return "PROXY proxy:80";

}

else if (url.substring(0, 4) == "ftp:") {

return "PROXY fproxy:80";

}

else if (url.substring(0, 7) == "gopher:") {

return "PROXY gproxy";

}

else if (url.substring(0, 6) == "https:") {

return "PROXY secproxy:8080";

}

else {

return "DIRECT";

}

}

この例の中の substring 関数は、指定された数の文字を文字列の先頭から抽出します。

例 7 : ホスト名が IP アドレスと一致するかどうかを検査して、プロキシの設定を決定する

次の関数では、ホスト名を IP アドレスに変換した後、指定された文字列 (たとえば、<999.99.99.999>) と比較して、プロキシ サーバーを選択します。

function FindProxyForURL(url, host)

{

if (dnsResolve(host) == "999.99.99.999") { // = http://secproxy

return "PROXY secproxy:8080";

}

else {

return "PROXY proxy:80";

}

}

noteNote
このスクリプトで使用される dnsResolve 関数では、DNS サーバーに対して照会を実行します。

例 8 : 指定された IP アドレスとホストの IP アドレスが一致する場合はプロキシを使用して接続し、一致しない場合は直接接続する

次の関数も、指定された IP アドレスに基づいてプロキシを選択する別の方法です。

function FindProxyForURL(url, host)

{

if (myIpAddress() == "999.99.999.99") {

return "PROXY proxy:80"; }

else {

return "DIRECT";

}

}

myIpAddress 関数では、ブラウザーが実行されているホストの IP アドレス (整数 + ドット形式) を返します。 この例では、例 7 とは異なり、関数呼び出しを使用して数値の IP アドレスを明示的に取得します (例 7 では、dnsResolve 関数を使用して、ホスト名を数値の IP アドレスに変換しています)。

例 9 : ホスト名にドットが含まれている場合はプロキシを使用して接続し、含まれていない場合は直接接続する

次の関数では、ホスト名に含まれているドット (ピリオド) の数を調べます。 ホスト名にドットが含まれている場合は、ブラウザーは <proxy> を使用して接続します。 ホスト名にドットが含まれていない場合は、直接接続します。 この関数は、ホスト名の特性に基づいて接続の種類を決定する別の方法です。

function FindProxyForURL(url, host)

{

if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0

return "PROXY proxy:80";

}

return "DIRECT";

}

dnsDomainLevels 関数は、ホスト名に含まれるドットの個数を整数で返します。

例 10 : 指定した曜日にはプロキシを使用して接続し、他の曜日には直接接続する

次の関数では、ブラウザーでプロキシ サーバー (<proxy>) を使用する曜日を指定して、接続の種類を決定します。 この範囲に含まれない曜日には、ブラウザーは直接接続します。 この関数は、トラフィックの負荷が高いときにプロキシを使用し、負荷が低いときに直接接続するような場合に役立ちます。

function FindProxyForURL(url, host)

{

if(weekdayRange("WED", "SAT", "GMT"))

return "PROXY proxy:80";

else

return "DIRECT";

}

weekdayRange(<day1> [, <day2>] [,"GMT"] ) 関数では、現在のシステム時刻がパラメーター (<day1> およびオプションの <day2>) の指定範囲に含まれている場合に TRUE (真) を返します。 オプションの GMT パラメーターは、時刻がローカル タイム ゾーンではなくグリニッジ標準時であることを指定します。

表示: