경고
사용과 지원이 중단된 Internet Explorer 11 데스크톱 애플리케이션이 Microsoft Edge 업데이트를 통해 특정 버전의 Windows 10에서 영구적으로 비활성화될 예정입니다. 자세한 내용은 Internet Explorer 11 데스크톱 앱 지원 중단 FAQ를 참조하세요.
이 항목에서는 자동 프록시 구성 스크립트(PAC 파일, Wpad.dat라고도 함)의 성능을 최적화하는 방법을 설명합니다. 이 문서에서는 프록시 서버를 통해 직접 인트라넷 서버 및 외부 내부 트래픽과 관련된 문제를 해결하는 방법을 중점적으로 설명합니다.
주소(URL 또는 호스트 이름) 를 평가하는 데 사용되는 함수에 대한 자세한 내용은 IEAK 11에서 프록시 자동 구성(.pac) 파일을 사용합니다.
참고
isInNet(), isResolvable(), 및 dnsResolve() 함수는 DNS 하위 시스템에 쿼리를 보냅니다. 따라서 이러한 함수의 사용을 최소화하거나 최소한 최소화해야 합니다.
NetBIOS 이름 쿼리
NetBIOS 이름(마침표가 없는 서버 이름)은 인트라넷에서만 사용되며 프록시를 통해 라우팅되지 않습니다.
if (isPlainHostName(host))
return "DIRECT";
내부 DNS 접미사 쿼리
내부적으로 사용되는 DNS 영역은 일반적으로 직접 라우팅됩니다. 이러한 호스트를 확인하는 가장 쉬운 방법은 함수를 사용하는 것입니다 dnsDomainis .
if (dnsDomainIs(host, ".dns.company.com"))
return "DIRECT";
를 사용하여 ShExMatch()동일한 결과에 대한 대체 및 더 빠른 메서드를 얻을 수 있습니다. 이 함수는 문자열 비교를 수행합니다. 동일한 결과를 반환하지만 별표(*)를 와일드카드 문자로 추가합니다.
if (shExpMatch(host, "*.dns.company.com"))
return "DIRECT";
IP 범위 쿼리
호스트의 IP 주소가 웹 서버 이름에 관계없이 로컬 인트라넷에 속하는 경우 직접 탐색하기 위해 프록시를 바이패스해야 합니다.
IP 주소가 주소 표시줄에 직접 입력되면 다시 확인할 필요가 없습니다. 호스트가 이미 IP 주소 형식인지 확인하기 위해 다음 코드를 사용할 수 있습니다.
var isIpV4Addr = /^(\d+.){3}\d+$/;
ret = isIpV4Addr.test(host);
이 코드는 변수 호스트에 마침표 다음에 다른 숫자가 오는 세 개의 숫자가 포함되어 있는지 확인합니다. 그러면 결과가 변수 반환에 전달됩니다. 결과는 IP에 대해 "true"이고, 그렇지 않으면 "false"입니다.
다음 코드 조각에서 변수 호스트 IP에는 향후 검사에 사용할 IP 주소가 포함됩니다.
var hostIP;
var isIpV4Addr = /^(\d+.){3}\d+$/;
if (isIpV4Addr.test(host))
hostIP = host;
else
hostIP = dnsResolve(host);
존재하지 않는 호스트가 함수에 전달되는 경우(예: 사용자가 주소 표시줄에 잘못된 항목을 입력한 경우) 호스트 IP의 결과는 0일 수 있습니다. 추가 오류 처리는 프록시에서 수행됩니다.
if (hostIP==0)
return "PROXY myproxy:80";
호스트의 IP 주소가 있으므로 내부 IP 범위를 확인해야 합니다.
가능하면 shExpMatch 기능을 isInNet 대신 사용하세요. 다음 코드 조각은 결과가 동일하지만 shExpMatch 더 빠르게 실행됩니다.
if (isInNet(hostIP, "95.53.0.0", "255.255.0.0"))
return "DIRECT";
if (shExpMatch(hostIP, "95.53.*"))
return "DIRECT";
JavaScript는 대/소문자를 구분합니다.
프록시 스크립트는 JavaScript 언어를 사용합니다. JavaScript는 대/소문자를 구분합니다. 따라서 if 대문자로 된 절은 절대 true가 되지 않지만, 다른 매개 변수는 소문자를 사용합니다. Internet Explorer 자체는 함수가 호출되기 전에 host 변수를 urlFindProxyForURL 소문자로 변환합니다.
이 조건은 .에 대해 WinHTTP적용되지 않습니다. 이는 WinHTTP가 host와 url를 함수에 직접 전달하기 때문입니다.
따라서 PAC 파일 내에서 검사되는 매개 변수는 평가되기 전에 PAC 내에서 변환되어야 합니다.
host = host.toLowerCase();
IPv6 사용
IPv6 주소를 사용하고 처리하려면 Internet Explorer가 현재 지원되는 모든 Windows 버전(Windows Vista 이후 WinHTTP)에 포함되어 있기 때문에 Internet Explorer에서 지원합니다. 그러나 이 경우 다음 문서에 설명된 대로 "Ex" 함수(예: isInNetEx())를 사용해야 합니다.
구현 예제 myIpAddressEx 는 Internet Explorer 9에서 잘못된 결과를 반환하는 "myIpAddress" 함수를 참조하세요.
PAC 파일 테스트
스크립트에 구문 오류(예: 문에 if 누락된 ")" 문자가 포함되어 있으면 스크립트가 실행되지 않습니다. 오류를 최소화하려면 구문 검사를 실행하는 스크립트 편집기를 사용하는 것이 좋습니다. Visual Studio를 사용하여 편집하는 동안 PAC 파일의 확장명 이름을 ".js"로 바꿀 수 있지만 웹 서버로 업로드하기 전에 ".pac"로 이름을 바꿀 수 있습니다.
참고
Windows 10부터는 더 이상 파일 기반 PAC 파일을 사용할 수 없습니다. 자세한 내용은 다음 문서를 참조하세요.
Autoprox.exe 사용하여 테스트
경우에 따라 웹 사이트에 액세스할 수 없는 경우에도 PAC 파일을 테스트해야 합니다. 이렇게 하려면 Autoprox.exe 명령줄 도구를 사용할 수 있습니다.
추가 매개 변수를 사용하지 않고 명령 내에서 도구를 열면 도움말이 포함된 다음 출력이 반환됩니다.
C:\temp>autoprox
Help for AUTOPROX.EXE
Version : 2.44 (12/16/2019)
Usage : AUTOPROX -a (calling DetectAutoProxyUrl and saving wpad.dat file in temporary file if success)
Usage : AUTOPROX -n (calling DetectAutoProxyUrl with PROXY_AUTO_DETECT_TYPE_DNS_A only and saving wpad.dat file in temporary file if success)
Usage : AUTOPROX [-o] [-d] [-v] [-u:url] [-p:Path to autoproxy file] [-i:IP address]
-o: calls InternetInitializeAutoProxyDll with helper functions implemented in AUTOPROX
-i:IP Address: calls InternetInitializeAutoProxyDll with helper functions implemented in AUTOPROX and using provided IP Address
-v: verbose output for helper functions
For debugging: -d plus HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings\JITDebug=1
AUTOPROX -u:url: calling DetectAutoProxyUrl and using autoproxy file to find the proxy for the url
AUTOPROX -u:url -p:path: using the autoproxy file/url from the path to find proxy for the url
Example: autoprox http://www.microsoft.com -> calling DetectAutoProxyUrl and using WPAD if found
Example: autoprox -o -u:http://www.microsoft.com -p:c:\inetpub\wwwroot\wpad.dat
Example: autoprox -u:http://www.microsoft.com -p:http://proxy/wpad.dat
Example: autoprox -d -u:http://www.microsoft.com -p:http://proxy/wpad.dat
샘플이 사용되는 경우 출력은 다음과 같습니다.
C:\temp>autoprox -u:https://us.msn.com -p:c:\temp\sample.pac
Searching proxy for url : https://us.msn.com
Searching proxy using file : c:\temp\sample.pac
The Winsock 2.2 dll was found okay
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
Calling InternetGetProxyInfo for url https://us.msn.com and host us.msn.com
Proxy returned for url https://us.msn.com is:
PROXY myproxy:80;
Autoprox.exe 오류 처리
PAC 파일에 구문 오류가 포함된 경우 다음 메시지가 표시됩니다.
오류: InternetGetProxyInfo가 오류 번호 0x3eb 1003으로 실패했습니다.
로컬 테스트를 완료한 후 HTTP 프로토콜을 통해 액세스할 웹 서버에 PAC 파일을 복사해야 합니다.
예제:
function FindProxyForURL(url, host) {
// NetBIOS-names
if (isPlainHostName(host))
return "DIRECT";
// change to lower case, if not already been done
host = host.toLowerCase();
// internal DNS-suffixes
if (shExpMatch(host, "*.corp.company.com") ||
shExpMatch(host, "*.dns.company.com"))
return "DIRECT";
// Save the IP-address to variable hostIP
var hostIP;
var isIpV4Addr = /^(\d+.){3}\d+$/;
if (isIpV4Addr.test(host))
hostIP = host;
else
hostIP = dnsResolve(host);
// IP could not be determined -> go to proxy
if (hostIP == 0)
return "PROXY myproxy:80";
// These 3 scopes are used only internally
if (shExpMatch(hostIP, "95.53.*") ||
shExpMatch(hostIP, "192.168.*") ||
shExpMatch(hostIP, "127.0.0.1"))
return "DIRECT";
// Eveything else goes through the proxy
return "PROXY myproxy:80;";
}
타사 연락처 고지
이 문서에 포함된 타사의 연락처 정보는 이 항목에 대한 추가 정보를 찾는 데 도움을 주기 위한 것입니다. 이 연락처 정보는 공지 없이 변경될 수 있습니다. Microsoft는 타사 연락처 정보의 정확성을 보증하지 않습니다.