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