다음 절에서는 JavaScript 함수에 대해 예를 들어 자세히 설명합니다.
이 예에서는 브라우저가 정규화되지 않은 모든 호스트와 로컬 도메인에 있는 호스트에 직접 연결합니다. 다른 모든 호스트는 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"; }
이 예는 예 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.com 및 merchant.example.com도 프록시를 통해 연결됩니다.
예외 순서는 효율성을 향상시킵니다. localHostOrDomainIs()() 함수는 모든 URL이 아닌 로컬 도메인에 있는 URL에 대해서만 실행됩니다. 특히 and 표현식 앞에 있는 or 표현식 주위의 괄호에 주의하십시오.
이 예는 내부 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"; }
이 예에서는 지정된 서브넷의 모든 호스트가 직접 연결됩니다. 다른 호스트는 프록시를 통해 연결됩니다.
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"; }
이 예는 훨씬 복잡합니다. 이 예에서는 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"; }
이 예는 기본적으로 예 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"; }
특정 프로토콜에 대해 프록시를 설정할 수 있습니다. 대부분의 표준 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; } ...