Sun Java System Web Proxy Server 4.0.4 管理ガイド

自動設定ファイルの手動による作成

この節では、自動設定ファイルを手動で作成する方法について説明します。

プロキシ設定ファイルは、クライアントサイド JavaScript を使用して記述されています。各ファイルには、FindProxyForURL() という 1 つの JavaScript 関数が含まれています。この関数は、各 URL に対してブラウザが使用するプロキシサーバーがあれば、どれを使用するのかを決定するものです。ブラウザは、JavaScript 関数に 2 つのパラメータを送信します。接続先の配信元サーバーのホスト名と、取得しようとしている URL です。JavaScript 関数は、処理方法を示す値を Navigator に返します。次の節では、関数の構文と考えられる戻り値について説明します。

FindProxyForURL() 関数

FindProxyFor() URL 関数の構文は次のとおりです。

function FindProxyForURL(url, host){   ...}

ブラウザがアクセスするすべての URL に対して、url および host パラメータが送られ、次のようにして関数が呼び出されます。

ret = FindProxyForURL(url, host);

url は、ブラウザからアクセスされる完全な URL です。

host は、アクセスされた URL から抽出されるホスト名です。これは便宜上使用しているだけで、:// と最初の : またはそのあとの / の間にある文字列と同じものです。このパラメータにはポート番号は含まれません。ポート番号は必要に応じて URL から抽出できます。

ret (戻り値) は、設定を記述した文字列です。

関数の戻り値

自動設定ファイルには、関数 FindProxyForURL () が含まれています。この関数は、クライアントホスト名と、アクセスしている URL をパラメータとして使用します。この関数は、ブラウザに処理方法を指示する 1 つの文字列を返します。この文字列が null の場合は、プロキシは使用されません。この文字列には、次の表に示す構成ブロックを、セミコロンで区切っていくつでも含めることができます。

表 17–2 FindProxyForURL() の戻り値

戻り値 

ブラウザの結果のアクション 

DIRECT

プロキシを経由せずに、サーバーに直接接続します。 

PROXY host:port

指定されたプロキシとポート番号を使用します。複数の値がセミコロンで区切られている場合、最初のプロキシが使用されます。そのプロキシで失敗した場合は、それ以降のプロキシが順に使用されます。 

SOCKS host:port

指定された SOCKS サーバーを使用します。複数の値がセミコロンで区切られている場合、最初のプロキシが使用されます。そのプロキシで失敗した場合は、それ以降のプロキシが順に使用されます。 

ブラウザは、使用できないプロキシサーバーに遭遇すると、30 分後に以前に応答のなかったプロキシに自動的に再度アクセスします。それでも応答がなければ 1 時間後というように、30 分間隔で再試行します。つまり、プロキシサーバーを一時的にシャットダウンした場合でも、再起動後 30 分以内には、クライアントがプロキシの使用を再開することになります。

すべてのプロキシが停止しており、DIRECT 戻り値が指定されていない場合、ブラウザは、一時的にプロキシを無視して直接接続を試みるかどうかをユーザーに問い合わせます。ブラウザは、プロキシを 20 分後に再試行し、さらにまた 20 分後というように、20 分間隔で再試行するかどうかを問い合わせてきます。

次の例では、戻り値は、ポート 8080 上で w3proxy.example.com というプロキシを使用するようにブラウザに指示していますが、このプロキシが使用できない場合、ブラウザはポート 8080 上で proxy1.example.com というプロキシを使用します。

PROXY w3proxy.example.com:8080; PROXY proxy1.example.com:8080

次の例では、一次プロキシは w3proxy.example.com:8080 で、このプロキシが使用できない場合、ブラウザは proxy1.example.com:8080 を使用します。これらのプロキシがどちらも使用できない場合、ブラウザはサーバーに直接アクセスします。さらに 20 分後、ブラウザは最初のプロキシを再試行するかどうかを問い合わせてきます。

PROXY w3proxy.example.com:8080; PROXY proxy1.example.com:8080; DIRECT

JavaScript の関数および環境

JavaScript 言語には、複数の事前定義された関数と環境条件があり、これらはプロキシの処理に役立ちます。これらの関数はそれぞれ、一定の条件が満たされているかどうかをチェックして、true または false の値を返します。ただし、関連するユーティリティー関数は例外で、DNS ホスト名または IP アドレスを返します。メインの FindProxyForURL() 関数内でこれらの関数を使用して、ブラウザに送る戻り値を決定することができます。この章の後半で挙げる例では、これらの関数の使用に関する考え方を説明します。

この節では、それぞれの関数や環境条件について説明します。プロキシとのブラウザ統合に適用される関数と環境変数は、次のとおりです。

ホスト名ベースの関数

ホスト名ベースの関数では、ホスト名または IP アドレスを使用して、使用するプロキシがあれば決定します。

dnsDomainIs()(host, domain)

dnsDomainIs()() 関数は、URL ホスト名が、指定された DNS ドメインに属しているかどうかを検出します。この関数は、ローカルドメインに対してプロキシを使用しないようにブラウザを設定する場合に役立ちます。「例 1: ローカルホスト以外の全サーバーのプロキシ」「例 2: ファイアウォールの外側にあるローカルサーバーのプロキシ」を参照してください。

この関数は、要求を受け取るプロキシが、URL の属している DNS ドメインに基づいてプロキシのグループから選択される状況において、複数のプロキシを使用して負荷分散をはかる場合にも役立ちます。たとえば、.edu を含む複数の URL をあるプロキシに割り当て、.com を含む複数の URL を別のプロキシに割り当てることで負荷分散をはかる場合、dnsDomainIs()() を使用して URL ホスト名を確認することができます。

パラメータ

host は、URL からのホスト名です。

domain は、ホスト名のテストで照合するドメイン名です。

戻り値

true または false

次の文は true になります。

dnsDomainIs("www.example.com", ".example.com")

次の文は false になります。

dnsDomainIs("www", ".example.com") dnsDomainIs("www.mcom.com", 
	".example.com")

isInNet()(host, pattern, mask)

isInNet()() 関数を使用すると、URL ホスト名を IP アドレスに解決し、それがマスクによって指定されたサブネットに属しているかどうかをテストすることができます。これは、SOCKS が使用するものと一致する IP アドレスパターンです。「例 4: サブネットへの直接接続」を参照してください。

パラメータ:

host は、DNS ホスト名または IP アドレスです。ホスト名が渡されると、この関数はこれを IP アドレスに解決します。

pattern は、ドット区切り形式の IP アドレスパターンです。

mask は、IP アドレスパターンマスクで、IP アドレスのどの部分をマッチングするのかを指定します。値 0 は無視、値 255 は一致を意味しています。この関数は、ホストの IP アドレスが指定された IP アドレスパターンと一致すると true になります。

戻り値

true または false

次の文では、ホストの IP アドレスが 198.95.249.79 と完全に一致した場合のみ true になります。

isInNet(host, "198.95.249.79", "255.255.255.255")

次の文では、ホストの IP アドレスが 198.95.*.* と一致した場合のみ true になります。 isInNet(host, "198.95.0.0", "255.255.0.0")

isPlainhost name()(host)

isPlainhost name()() 関数は、要求された URL のホスト名がプレーンなホスト名なのか完全修飾ドメイン名なのかを検出します。この関数は、ブラウザをローカルサーバーに直接接続させる場合に役立ちます。「例 1: ローカルホスト以外の全サーバーのプロキシ」「例 2: ファイアウォールの外側にあるローカルサーバーのプロキシ」を参照してください。

パラメータ

host は、ホスト名にドメイン名がない (ドットの付いたセグメントがない) 場合のみの、URL からのホスト名です (ポート番号を除く)。

戻り値

host がローカルの場合は true、host がリモートの場合は false

isPlainhost name("host")

hostwww などの場合は true が返されます。host が www. example.com などの場合は false が返されます。

isResolvable()(host)

ファイアウォールの内側の DNS が内部ホストのみを認識する場合、isResolvable()() 関数を使用して、ホスト名がネットワークの内部か外部かをテストすることができます。この関数を使用すると、内部サーバーには直接接続を使用し、外部サーバーに対してのみプロキシを使用するように、ブラウザを設定できます。これは、ファイアウォールの内側の内部ホストが、ほかの内部ホストの DNS ドメイン名は解決できても、外部ホストは一切解決できないサイトで役立ちます。 isResolvable()() 関数は DNS を参照し、ホスト名を IP アドレスに解決しようとします。「例 3: 未解決のホストのみのプロキシ」を参照してください。

パラメータ

host() は、URL からのホスト名です。

戻り値

ホスト名が解決できたら true、できなければ false

isResolvable("host")

host()www などで、DNS を介して解決できる場合、この関数は true を返します。

localHostOrDomainIs()(host, hostdom)

localHostOrDomainIs()() 関数は、完全修飾ドメイン名かプレーンなホスト名のどちらかによってアクセスされる可能性のあるローカルホストを特定します。「例 2: ファイアウォールの外側にあるローカルサーバーのプロキシ」を参照してください。

localHostOrDomainIs()() 関数は、ホスト名が指定されたホスト名と完全に一致する場合か、ホスト名の中に非修飾ホスト名と一致するドメイン名部分がない場合に、true を返します。

パラメータ

host は、URL からのホスト名です。

hostdom は、一致する完全修飾ホスト名です。

戻り値

true または false

次の文は true (完全一致) です。

localHostOrDomainIs("www.example.com", "www.example.com")

次の文は true (ホスト名は一致、ドメイン名は指定なし) です。

localHostOrDomainIs("www", "www.example.com")

次の文は false (ドメイン名が不一致) です。

localHostOrDomainIs("www.mcom.com", "www.example.com")

次の文は false (ホスト名が不一致) です。

localHostOrDomainIs("home.example.com", "www.example.com")

ユーティリティー関数

ユーティリティー関数を使用すると、ドメインレベル、ブラウザが実行されているホスト、あるいはホストの IP アドレスを検出することができます。

dnsDomainLevels()(host)

dnsDomainLevels()() 関数は、URL ホスト名の中の DNS レベルの数 (ドットの数) を検出します。

パラメータ

host は、URL からのホスト名です。

戻り値

DNS ドメインレベルの数 (整数)。

dnsDomainLevels("www") は 0 を返します。

dnsDomainLevels("www.example.com") は 2 を返します。

dnsResolve()(host)

dnsResolve()() 関数は、指定されたホスト (通常は URL からのもの) の IP アドレスを解決します。この関数は、JavaScript 関数が、既存の関数でできるものより高度なパターンマッチングを実行する必要がある場合に役立ちます。

パラメータ

host は、解決するホスト名です。指定された DNS ホスト名を IP アドレスに解決し、ドット区切り形式の文字列として返します。

戻り値

ドットの付いた Quad 表記の IP アドレス (文字列値)

次の例では、文字列 198.95.249.79 が返されます。

dnsResolve("home.example.com")

myIpAddress()()

myIpAddress()() 関数は、ブラウザが実行されているホストによって、JavaScript 関数が異なる動作をする必要のある場合に役立ちます。この関数は、ブラウザを実行しているコンピュータの IP アドレスを返します。

戻り値

ドットの付いた Quad 表記の IP アドレス (文字列値)

例:

次の例では、コンピュータ home.example.com 上で Navigator を実行している場合に、文字列 198.95.249.79 を返します。

myIpAddress()

URL/ホスト名ベースの条件

負荷分散やルーティングを行うために、ホスト名または URL をマッチングすることができます。

shExpMatch()(str, shexp)

shExpMatch()() 関数は、URL ホスト名または URL そのものをマッチングします。この関数は主に、負荷を分散して、さまざまなプロキシサーバーに URL をインテリジェントにルーティングする場合に使用します。

パラメータ

str は、比較対象の文字列です (たとえば、URL またはホスト名)。

shexp は、比較するシェル表現です。

この表現は、文字列が指定されたシェル表現と一致したときに true になります。「例 6: shExpMatch()() によるプロキシの負荷分散」を参照してください。

戻り値

true または false

最初の例は true を返し、2 つ目の例は false を返します。

shExpMatch("http://home.example.com/people/index.html",
            ".*/people/.*")
shExpMatch("http://home.example.com/people/yourpage/index.html",
            ".*/mypage/.*")

時間ベースの条件

日付、時間、または曜日によって、FindProxyForURL 関数が異なる動作をするように設定できます。

dateRange() (day, month, year...)

dateRange()() 関数は、1996 年 4 月 19 日から 1996 年 5 月 3 日のような、特定の日付や日付範囲を検出します。これは、日付によって FindProxyForURL() 関数に異なる動作をさせる場合に役立ちます。たとえば、プロキシの 1 つに対してメンテナンスのための停止時間を定期的にスケジュールするような場合です。

日付の範囲は、次に示すいくつかの方法で指定できます。

dateRange(day)dateRange(day1, day2)dateRange(mon)dateRange(month1, month2)dateRange(year)dateRange(year1, year2)dateRange(day1, month1, day2, month2)dateRange(month1, year1, month2, year2)dateRange(day1, month1, year1, day2, month2, year2)dateRange(day1, month1, year1, day2, month2, year2, gmt)

パラメータ

day は、月の日付を表す 1 〜 31 までの整数です。

month には、月を表す次のいずれかの文字列が入ります。JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC

year には、西暦を表す 4 桁の整数が入ります (たとえば 1996)。

gmt には、グリニッジ標準時で時間の比較を行う場合は文字列「GMT」を指定し、時間を現地時間帯とする場合は空白のままにします。GMT パラメータは、常に最後のパラメータとして、どの呼び出しプロファイル内でも指定できます。1 つの値だけが指定 (日、月、年の各カテゴリから) された場合、この関数は、その指定と一致する日に対してのみ true の値を返します。2 つの値が指定された場合、最初の指定時間から 2 つ目の指定時間までが true になります。

次の文は、ローカル時間帯の各月の最初の日について true になります。 dateRange(1)

次の文は、グリニッジ標準時の各月の最初の日について true になります。dateRange(1, "GMT")

次の文は、各月の前半について true になります。dateRange(1, 15)

次の文は、各年の 12 月 24 日について true になります。dateRange(24, "DEC")

次の文は、1995 年 12 月 24 日について true になります。dateRange(24, "DEC", 1995)

次の文は、年の第 1 四半期について true になります。dateRange("JAN", "MAR")

次の文は、各年の 6 月 1 日から 8 月 15 日までについて true になります。 dateRange(1, "JUN", 15, "AUG")

次の文は、1995 年 6 月 1 日から 1995 年 8 月 15 日までについて true になります。 dateRange(1, "JUN", 15, 1995, "AUG", 1995)

次の文は、1995 年 10 月から 1996 年 3 月までについて true になります。dateRange("OCT", 1995, "MAR", 1996)

次の文は、1995 年全体を通じて true になります。dateRange(1995)

次の文は、1995 年の始めから 1997 年の終わりまでについて true になります。 dateRange(1995, 1997)

timeRange (hour, minute, second...)

timeRange() 関数は、午後 9 時から午前 12 時のような、特定の時間や時間範囲を検出します。これは、時間によって FindProxyForURL() 関数に異なる動作をさせる場合に役立ちます。

timeRange(hour)timeRange(hour1, hour2)timeRange(hour1, min1, hour2, min2)timeRange(hour1, min1, sec1, hour2, min2, sec2)

パラメータ:

hour は、0 時から 23 時までの時間です (0 は午前 0 時、23 は午後 11 時)。

min は、0 〜 59 までの分数です。

sec は、0 〜 59 までの秒数です。

gmt は、グリニッジ標準時に対しては文字列 GMT を指定し、現地時間帯の場合は何も指定しません。このパラメータは、各パラメータプロファイルで使用でき、常に最後のパラメータとなります。

戻り値

true または false

例:

次の文は、正午から午後 1 時までが true になります。m: timerange(12, 13)

次の文は、グリニッジ標準時の正午から午後 12 時 59 分までが true になります。timerange(12, "GMT")

次の文は、午前 9 時から午後 5 時までが true になります。m: timerange(9, 17)

次の文は、午前 0 時から午前 0 時の 30 秒後までの間について true になります。 timerange(0, 0, 0, 0, 0, 30)

weekdayRange()(wd1, wd2, gmt)

weekdayRange() 関数は、月曜日から金曜日などの、特定の曜日または曜日の範囲を検出します。これは、曜日によって FindProxyForURL 関数に異なる動作をさせる場合に役立ちます。

パラメータ

wd1wd2 には、曜日を表す次のいずれかの文字列が入ります。SUN MON TUE WED THU FRI SAT

gmt には、グリニッジ標準時を表す GMT を指定するか、現地時間帯の場合は空白のままにします。

最初のパラメータ wd1 のみが必須です。wd2 または gmt、あるいはその両方とも空白のままにすることができます。

パラメータが 1 つしか指定されていない場合、関数は、パラメータの表す曜日についてのみ true の値を返します。2 つ目のパラメータとして文字列 GMT が指定された場合、時間はグリニッジ標準時と見なされ、それ以外の場合は、現地時間帯と見なされます。

wd1wd2 の両方が定義された場合、現在の曜日がこれら 2 つの曜日の間にあれば条件は true になります。両端の曜日も含まれます。この場合、パラメータの順序が重要になります。"MON", "WED" は、月曜日から水曜日までを表しますが、"WED", "MON" は水曜日から次週の月曜日までを表します。

次の文は、月曜日から金曜日までが true です (現地時間帯)。weekdayRange("MON", "FRI")

次の文は、グリニッジ標準時の月曜日から金曜日までが true です。 weekdayRange("MON", "FRI", "GMT")

次の文は、現地時間の土曜日が true です。weekdayRange("SAT")

次の文は、グリニッジ標準時の土曜日が true です。weekdayRange("SAT", "GMT")

次の文は、金曜日から月曜日までが true です (曜日の順序が重要)。 weekdayRange("FRI", "MON")

関数の例

この節では、JavaScript 関数の詳細な例を説明します。

例 1: ローカルホスト以外の全サーバーのプロキシ

次の例では、ブラウザは、完全修飾されていないすべてのホストと、ローカルドメイン内のホストに直接接続しています。それ以外はすべて w3proxy.example .com:8080 というプロキシを経由します。


注 –

プロキシが停止すると、自動的に直接接続に切り替わります。


    function FindProxyForURL(url, host)
    {
        if (isPlainhost name(host) ||
            dnsDomainIs(host, ".example.com") ||
            dnsDomainIs(host, ".mcom.com"))
            return "DIRECT";
        else
            return "PROXY w3proxy.example.com:8080; DIRECT";
    }

例 2: ファイアウォールの外側にあるローカルサーバーのプロキシ

この例は「例 1: ローカルホスト以外の全サーバーのプロキシ」とよく似ていますが、ここではファイアウォールの外側にあるローカルサーバーに対してプロキシを使用しています。ローカルドメインに属しているが、ファイアウォールの外側にあり、プロキシサーバーを経由しないとアクセスできないホスト (主要な Web サーバーなど) が存在する場合、これらの例外は localHostOrDomainIs()() 関数を使用して処理されます。

    function FindProxyForURL(url, host)
    {
        if ((isPlainhost name(host) ||
        dnsDomainIs(host, ".example.com")) &&
        !localHostOrDomainIs(host, "www.example.com") &&
        !localHostOrDoaminIs(host, "merchant.example.com"))
            return "DIRECT";
        else
            return "PROXY w3proxy.example.com:8080; DIRECT";
    }

この例では、example.com ドメイン内のローカルホストを除くすべてに対してプロキシを使用しています。ホスト www.example.commerchant.example.com も、プロキシを経由します。

例外の順序によって効率を上げることができます。localHostOrDomainIs() () 関数は、すべての URL に対してではなく、ローカルドメイン内の URL に対してのみ実行されます。特に、and 式の前の or 式を囲む括弧に注意してください。

例 3: 未解決のホストのみのプロキシ

この例は、内部ホスト名だけを解決できるように内部 DNS が設定されている環境で機能します。解決できないホストに対してのみプロキシを使用することを目的とします。

    function FindProxyForURL(url, host)
    {
        if (isResolvable(host))
                return "DIRECT";
            else
                return "PROXY proxy.mydomain.com:8080";
    }

この例では、DNS を毎回参照する必要があるので、ほかのルールとグループ化して、ほかのルールで結果が得られない場合のみ DNS を参照するように設定します。

    function FindProxyForURL(url, host)
    {
        if (isPlainhost name(host) ||
            dnsDomainIs(host, ".mydomain.com") ||
            isResolvable(host))
            return "DIRECT";
        else
            return "PROXY proxy.mydomain.com:8080";
    }

例 4: サブネットへの直接接続

この例では、指定されたサブネット内のホストはすべて直接接続し、それ以外はプロキシを経由します。

    function FindProxyForURL(url, host)
    {
        if (isInNet(host, "198.95.0.0", "255.255.0.0"))
            return "DIRECT";
        else
            return "PROXY proxy.mydomain.com:8080";
    }

この例では、先頭に冗長なルールを追加して、DNS の使用を最小限に抑えることができます。

    function FindProxyForURL(url, host)
    {
        if (isPlainhost name(host) ||
            dnsDomainIs(host, ".mydomain.com") ||
            isInNet(host, "198.95.0.0", "255.255.0.0"))
            return "DIRECT";
        else
            return "PROXY proxy.mydomain.com:8080";
    }

例 5: dnsDomainIs()() によるプロキシの負荷分散

次に挙げる例は、より詳細なものです。ここにはプロキシサーバーが 4 台あり、そのうちの 1 台がほかのサーバーに対するホットスタンバイとして機能しています。したがって、ほかの 3 台のサーバーのいずれかが停止したら、4 台目のサーバーが引き継ぎます。ほかの 3 台のプロキシサーバーは URL パターンに基づいて負荷を分散しており、これによってキャッシュが効率的に行われています。3 台のサーバー上のドキュメントはすべてコピーが 1 つしかありません。それぞれに 1 つずつコピーがあるわけではありません。負荷分散は、次の表に示すように行われています。

表 17–3 プロキシの負荷分散

プロキシ (Proxy) 

目的 

#1 

.com ドメイン

#2 

.edu ドメイン

#3 

ほかのすべてのドメイン 

#4 

ホットスタンバイ 

ローカルアクセスはすべて直接行われる必要があります。プロキシサーバーはすべて、ポート 8080 上で実行されます。+ 演算子を使用して、文字列を連結することができます。

function FindProxyForURL(url, host)
{
    if (isPlainhost name(host) || dnsDomainIs(host, ".mydomain.com"))
        return "DIRECT";

    else if (dnsDomainIs(host, ".com"))
        return "PROXY proxy1.mydomain.com:8080; " +
              "PROXY proxy4.mydomain.com:8080";

    else if (dnsDomainIs(host, ".edu"))
        return "PROXY proxy2.mydomain.com:8080; " +
              "PROXY proxy4.mydomain.com:8080";

    else
        return "PROXY proxy3.mydomain.com:8080; " +
              "PROXY proxy4.mydomain.com:8080";
}

例 6: shExpMatch()() によるプロキシの負荷分散

この例は、基本的には 「例 5: dnsDomainIs()() によるプロキシの負荷分散」と同じですが、dnsDomainIs()() を使用する代わりに、この例では shExpMatch()() が使用されています。

    function FindProxyForURL(url, host)
    {
    if (isPlainhost name(host) || dnsDomainIs(host, ".mydomain.com"))
        return "DIRECT";
    else if (shExpMatch(host, "*.com"))
        return "PROXY proxy1.mydomain.com:8080; " +
              "PROXY proxy4.mydomain.com:8080";
    else if (shExpMatch(host, "*.edu"))
        return "PROXY proxy2.mydomain.com:8080; " +
              "PROXY proxy4.mydomain.com:8080";
    else
        return "PROXY proxy3.mydomain.com:8080; " +
              "PROXY proxy4.mydomain.com:8080";
    }

例 7: 固有のプロトコルのプロキシ

固有のプロトコルに対するプロキシを設定できます。標準の JavaScript 機能のほとんどは、FindProxyForURL()() 関数で使用できるようになっています。たとえば、プロトコルに基づいて異なるプロキシを設定する場合は、substring()() 関数を使用できます。

    function FindProxyForURL(url, host)
    {
        if (url.substring(0, 5) == "http:") {
            return "PROXY http-proxy.mydomain.com:8080";
        }
        else if (url.substring(0, 4) == "ftp:") {
            return "PROXY ftp-proxy.mydomain.com:8080";
        }
        else if (url.substring(0, 7) == "gopher:") {
            return "PROXY gopher-proxy.mydomain.com:8080";
        }
        else if         (url.substring(0, 6) == "https:" ||
                url.substring(0, 6) == "snews:") {
            return "PROXY security-proxy.mydomain.com:8080";
        }
        else {
            return "DIRECT";
        }
    }

この処理は、次の例のように、shExpMatch() () 関数を使用して実行することもできます。

    ...
    if (shExpMatch(url, "http:*")) {
        return "PROXY http-proxy.mydomain.com:8080;
    }
    ...