질문:
프록시 PAC 파일이란 무엇이며 예제가 있습니까?
환경: Cisco Web Security Appliance
참고:이 기술 자료 문서는 Cisco에서 유지 관리하거나 지원하지 않는 소프트웨어를 참조합니다. 이 정보는 귀하의 편의를 위해 제공됩니다.자세한 내용은 소프트웨어 공급업체에 문의하십시오.
참조 링크:JavaScript 또는 JScript 자동 프록시 예제 파일
JavaScript 또는 JScript 자동 프록시 예제 파일
다음 스크립트에서는 '.pac' 파일을 사용하여 자동 프록시 URL을 지정하는 방법의 예를 제공합니다.이러한 기능을 사용하려면 프록시 이름, 포트 번호 및 IP 주소를 변경해야 합니다.
- isInNet, isResolable 및 dnsResolve 함수는 DNS 서버를 쿼리합니다.
- 개체 모델 개체, 속성 또는 메서드를 참조하면 프록시 자동 구성 파일이 자동으로 실패합니다.예를 들어, window.open(...), alert(...) 및 password(...)를 참조하면 Internet Explorer에서 프록시 자동 구성 파일이 실패합니다.
예 1:로컬 호스트는 직접 연결되고 다른 호스트는 모두 프록시를 통해 연결됩니다.
다음 함수는 호스트 이름이 로컬 호스트인지, 호스트 이름이 로컬 호스트인지, 직접 연결인지 여부를 확인합니다.호스트 이름이 로컬 호스트가 아닌 경우 프록시(프록시)를 통해 연결됩니다.
함수 FindProxyForURL(url, host)
{ 0}
if (isPlainHostName(host))
"직접" 반환;
기타
반환 "PROXY proxy:80";
}
isPlainHostName 함수는 호스트 이름에 점이 있는지 확인합니다.이 경우 false를 반환합니다.그렇지 않으면 함수가 true를 반환합니다.
참고:로컬 웹 서버에 직접 연결하려면 도메인 또는 서브넷 일치도 필요할 수 있습니다.호스트 이름만 사용하여 로컬 웹 서버에 대한 모든 요청을 수행하는 것은 아닙니다.
예 2:방화벽 내부의 호스트는 프록시를 통해 직접, 외부 로컬 서버에 연결
다음 함수는 호스트가 "일반" 호스트 이름인지(도메인 이름이 포함되지 않음을 의미) 또는 특정 도메인(.company.com)의 일부인지 확인하지만 호스트 이름이 www 또는 home이 아닙니다.
함수 FindProxyForURL(url, host)
{ 0}
if ((isPlainHostName(호스트) ||
dnsDomainIs(host, ".company.com") &&
!localHostOrDomainIs(host, "www.company.com") &&
! localHostOrDoadminIs(호스트, "home.company.com")
"직접" 반환;
기타
반환 "PROXY proxy:80";
}
참고:
- localHostOrDomainIs 함수는 로컬 도메인의 URL에 대해서만 실행됩니다.
- 호스트 이름의 도메인이 지정된 도메인과 일치하면 dnsDomainIs 함수는 true를 반환합니다.
예 3:호스트를 확인할 수 있는 경우 직접 연결합니다.그렇지 않으면 프록시를 사용하여 연결합니다.
다음 함수는 DNS 서버에 전달된 호스트 이름을 확인하도록 요청합니다.가능한 경우 직접 연결됩니다.그렇지 않으면 프록시를 통해 연결됩니다.이 기능은 내부 DNS 서버를 사용하여 모든 내부 호스트 이름을 확인할 때 유용합니다.
함수 FindProxyForURL(url, host)
{ 0}
if(isResolable(host))
"직접" 반환;
기타
반환 "PROXY proxy:80";
}
페이지 상단의 isResolable 함수에 대한 참고 사항을 참조하십시오.
예 4:호스트가 지정된 서브넷에 있으면 직접 연결합니다.그렇지 않으면 프록시를 사용하여 연결합니다.
다음 함수는 지정된 IP 주소 패턴 및 마스크를 호스트 이름과 비교합니다.이는 서브넷의 특정 호스트를 직접 연결하고 다른 호스트는 프록시를 사용하여 연결해야 하는 경우에 유용합니다.
함수 FindProxyForURL(url, host)
{ 0}
if (isInNet(host, "999.99.9.9", "255.0.255.0"))
"직접" 반환;
기타
반환 "PROXY proxy:80";
}
페이지 상단의 isInNet 함수에 대한 참고 사항을 참조하십시오.
호스트 IP 주소가 지정된 패턴과 일치하면 isInNet(host, pattern, mask) 함수는 true를 반환합니다.마스크는 일치시킬 IP 주소의 일부를 나타냅니다(255=match, 0=ignore).
예 5:호스트 도메인을 기반으로 연결 유형 결정
다음 함수는 호스트가 로컬인 경우 직접 연결을 지정합니다.호스트가 로컬이 아닌 경우 이 기능은 호스트 도메인을 기반으로 사용할 프록시를 결정합니다.호스트 도메인 이름이 프록시 선택 기준 중 하나인 경우 유용합니다.
함수 FindProxyForURL(url, host)
{ 0}
if (isPlainHostName(host))
"직접" 반환;
else if (shExpMatch(host, "*.com"))
반환 "PROXY comproxy:80";
else if (shExpMatch(host, "*.edu"))
"PROXY eduproxy:80"을 반환합니다.
기타
"프록시 프록시" 반환;
}
shExpMatch(str, shexp) 함수는 str가 셸 표현식 패턴을 사용하여 shexp와 일치하면 true를 반환합니다.
예 6:사용 중인 프로토콜을 기반으로 연결 유형 결정
다음 함수는 사용 중인 프로토콜을 추출하고 그에 따라 프록시를 선택합니다.프로토콜에 일치하는 항목이 없으면 직접 연결이 설정됩니다.이는 사용 중인 프로토콜이 프록시 선택 기준 중 하나인 경우 유용합니다.
함수 FindProxyForURL(url, host)
{ 0}
if (url.substring(0, 5) == "http:")
반환 "PROXY proxy:80";
}
else if (url.substring(0, 4) == "ftp:") {
반환 "PROXY fproxy:80";
}
else if (url.substring(0, 7) == "gopher:") {
"PROXY gproxy" 반환;
}
else if (url.substring(0, 6) == "https:") {
"PROXY secproxy:8080"을 반환합니다.
}
{
"직접" 반환;
}
}
substring 함수는 문자열에서 지정된 문자 수를 추출합니다.
예 7:호스트 이름이 IP 주소와 일치하는지 확인하여 프록시 설정 결정
다음 함수는 호스트 이름을 IP 주소로 변환하고 지정된 문자열과 비교하여 프록시를 선택합니다.
함수 FindProxyForURL(url, host)
{ 0}
if (dnsResolve(host) == "999.99.99.999") { // = http://proxy
"PROXY secproxy:8080"을 반환합니다.
}
{
반환 "PROXY proxy:80";
}
}
페이지 상단의 dnsResolve 기능에 대한 참고 사항을 참조하십시오.
예 8:호스트 IP가 지정된 IP와 일치하는 경우 프록시를 통해 연결하고, 그렇지 않은 경우 직접 연결
다음 기능은 IP 주소 지정을 기반으로 프록시를 선택하는 또 다른 방법입니다.이 예에서는 Example 7과 달리 함수 호출을 사용하여 숫자 IP 주소를 명시적으로 가져옵니다(예 7은 dnsResolve 함수를 사용하여 호스트 이름을 숫자 IP 주소로 변환합니다).
함수 FindProxyForURL(url, host)
{ 0}
if (myIpAddress() == "999.99.999.99") {
반환 "PROXY proxy:80";
}
{
"직접" 반환;
}
}
myIpAddress 함수는 브라우저가 실행 중인 호스트의 IP 주소(정수-점 형식)를 반환합니다.
예 9:호스트 이름에 점이 있으면 프록시를 사용하여 연결합니다.그렇지 않으면 직접 연결합니다.
다음 함수는 호스트 이름에 있는 점 수를 확인합니다.호스트 이름에 점이 있으면 프록시를 통해 연결합니다.호스트 이름에 점이 없으면 직접 연결합니다.호스트 이름 특성을 기반으로 연결 유형을 확인하는 또 다른 방법입니다.
함수 FindProxyForURL(url, host)
{ 0}
if (dnsDomainLevels(host) > 0) { // 호스트의 점 수가 0 이상인 경우
반환 "PROXY proxy:80";
}
"직접" 반환;
}
dnsDomainLevels 함수는 호스트 이름에 있는 점 수와 같은 정수를 반환합니다.
예 10:프록시를 통해 연결할 요일 지정, 직접 연결 요일 수
다음 함수는 프록시에 적합한 요일을 지정하여 연결 유형을 결정합니다.이러한 매개변수 사이에 속하지 않는 요일은 직접 연결을 사용합니다.이 기능은 트래픽이 많을 때 프록시를 사용하고 트래픽이 적을 때 직접 연결을 허용하려는 경우에 유용할 수 있습니다.
함수 FindProxyForURL(url, host)
{ 0}
if(weekdayRange("WED", "SAT", "GMT"))
반환 "PROXY proxy:80";
기타
"직접" 반환;
}
weekdayRange(day1 [,day2] [,GMT] ) 함수는 현재 시스템 시간이 day1, day2 및 GMT 매개 변수로 지정된 범위 내에 속하는지 여부를 반환합니다.첫 번째 매개 변수만 필요합니다.GMT 매개 변수는 시간 값이 현지 표준 시간대가 아닌 그리니치 평균 시간이라고 가정합니다.
예 11:간단한 수학 함수를 사용한 로드 밸런싱
function FindProxyForURL(url, host){
randomProxy(); 반환
}
function randomProxy()
{ 0}
switch( Math.floor( Math.random() *2))
{ 0}
케이스 0:반환 "프록시 1.1.1.1:3128;프록시 2.2.2.2;프록시 직접;"
사례 1:반환 "프록시 2.2.2.2:3128;프록시 1.1.1.1;프록시 직접;"
}
}
또한 하나의 프록시를 사용할 수 없는 경우 장애 조치도 구현됩니다.