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: 로컬 호스트를 제외한 모든 서버 프록시와 비슷하지만 방화벽 외부에 있는 로컬 서버의 프록시를 사용합니다. 기본 웹 서버와 같은 호스트는 로컬 도메인에 속하지만 방화벽 외부에 있어서 프록시 서버를 통해서만 접근할 수 있는 경우 이러한 예외는 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개의 프록시 서버를 사용하며 그 중 하나는 다른 서버에 대해 상시 대기 역할을 수행합니다. 나머지 3개의 프록시 서버가 중단될 경우 네 번째 서버가 역할을 수행합니다. 나머지 3개의 프록시 서버는 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()()로 프록시 로드 균형 조정과 동일하지만 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;
    }
    ...