Sun Java System Web Proxy Server 4.0.8 管理指南

函數範例

本小節提供 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()() 平衡代理伺服器的負載

此範例比上述範例複雜。此範例使用四個代理伺服器,而其中一個是做為其他伺服器的緊急備用伺服器。若任何三個代理伺服器當機,會由第四個代理伺服器接手。其他三個代理伺服器會根據 URL 式樣分擔負載,以使快取效果更好。對於任何文件,它在三個伺服器上只存在一份副本,而不是在其中的每個伺服器上都有一份副本。負載的分擔方式如下表所示。

表 17–3 平衡代理伺服器的負載

代理伺服器 

目的 

#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()() 平衡代理伺服器的負載相同,但範例 5 使用 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:針對特定協定使用代理伺服器

您可以為特定協定設定代理伺服器。您可以在 FindProxyForURL()() 函數中使用大部分標準 JavaScript 功能。例如,若要根據協定設定不同的代理伺服器,可以使用 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;
    }
    ...