【PAC 파일 문제 해결 모음】반영되지 않는다 / 특정 사이트만 직결하고 싶다… 자주 막히는 부분을 Q&A로
프록시 PAC 파일은 편리한 반면, 막상 운용하면 「변경했는데 반영되지 않는다」 「특정 사이트만 직결하고 싶다」 「애초에 작동하지 않는다」 등 의외로 막히는 부분이 많습니다. 이 글에서는 실무에서 자주 마주치는 문제를 Q&A 형식으로 정리했습니다. 기본적인 작성법은 이전 입문 글에서 설명하고 있으니 함께 봐 주세요.
※본 기사는 기술적인 예시 소개입니다. 동작은 브라우저·OS·네트워크 환경에 따라 다릅니다. 각 Q&A에 관련 도서 제휴 링크(아마존 어소시에이트)를 포함합니다.
Q1 PAC 파일을 변경했는데 반영되지 않는다
A. 가장 흔한 경우입니다. 원인의 대부분은 「캐시」. 브라우저나 OS가 PAC 파일을 일정 시간 캐시하기 때문에, 갱신해도 바로 반영되지 않을 수 있습니다. 특히 Internet Explorer 계열은 자동 프록시 스크립트를 내부에 캐시하는 동작이 있습니다.
대처로는, 브라우저를 완전히 재시작한다, PAC의 URL에 버전용 쿼리(예: proxy.pac?v=2)를 붙여 「다른 파일」로 인식시킨다, 배포 서버 측에서 Cache-Control 헤더를 조정한다 등이 유효합니다. IE에서는 그룹 정책으로 자동 프록시 스크립트의 캐시를 무효화할 수 있습니다.
포인트 「고쳤는데 안 고쳐질」 때는 먼저 캐시를 의심하세요. URL에 쿼리를 붙이는 것이 손쉬운 切り分け(구분) 방법입니다.
관련 도서(PR) 배포 서버나 캐시 제어를 배우고 싶다면. ▶ 아마존에서 찾기
Q2 특정 사이트만 프록시를 거치지 않고 직결하고 싶다
A. shExpMatch로 호스트명을 판정하고, 조건에 맞으면 DIRECT를 반환합니다. 판정은 위에서부터 순서대로 평가되어 처음 일치한 곳에서 종료됩니다. 제외하고 싶은 사이트는 되도록 앞쪽에 쓰는 것이 요령입니다.
function FindProxyForURL(url, host) {
// 이 도메인만 직결로
if (shExpMatch(host, "*.example.com")) {
return "DIRECT";
}
// 그 외에는 프록시 경유
return "PROXY proxy.example.com:8080";
}포인트 shExpMatch는 와일드카드(셸 식)이며 정규식이 아닙니다. 「*.example.com」처럼 씁니다.
관련 도서(PR) PAC는 JavaScript. 기초를 다지고 싶다면. ▶ 아마존에서 찾기
Q3 사내 시스템은 직결, 외부 사이트만 프록시로 하고 싶다
A. 인트라(사내) 판정에는, 점 없는 호스트명을 판정하는 isPlainHostName, 사내 도메인을 판정하는 dnsDomainIs, IP 범위로 판정하는 isInNet을 조합합니다. 사내용은 DIRECT, 그 외에는 프록시라는 정석적인 형태입니다.
function FindProxyForURL(url, host) {
// 사내·인트라는 직결
if (isPlainHostName(host) ||
dnsDomainIs(host, ".corp.local") ||
isInNet(host, "10.0.0.0", "255.0.0.0")) {
return "DIRECT";
}
// 그 외에는 외부 프록시
return "PROXY proxy.example.com:8080";
}포인트 isInNet이나 dnsResolve는 DNS 조회가 필요해 지연의 원인이 되기 쉽습니다. 문자열 판정(shExpMatch 등)으로 될 수 있으면 그쪽을 우선하세요.
관련 도서(PR) 사내 네트워크의 설계·구축에. ▶ 아마존에서 찾기
Q4 PAC 파일이 애초에 작동하지 않는다·읽히지 않는다
A. 먼저 의심할 것은 3가지입니다. ①구문 오류(세미콜론 누락, 함수명 오타, 괄호 대응 실수 등이 하나라도 있으면 스크립트 전체가 동작하지 않습니다), ②배포 문제(PAC의 URL에 접근 가능한지, 방화벽에 차단되지 않았는지), ③MIME 타입. 배포 서버에서 .pac의 MIME 타입을 application/x-ns-proxy-autoconfig로 설정해 두는 것이 안전합니다.
포인트 최근 브라우저는 file://로 둔 PAC의 사용을 제한하기도 합니다. 기본은 HTTP(S)로 배포하는 것이 확실합니다.
관련 도서(PR) 연결이 안 될 때의 구분·조사에. ▶ 아마존에서 찾기
Q5 프록시가 다운되면 자동으로 전환하고 싶다(페일오버)
A. 반환값을 세미콜론으로 구분해 여러 개 지정하면, 왼쪽부터 순서대로 시도하고 응답이 없으면 다음으로 폴백합니다. 마지막에 DIRECT를 두면, 모든 프록시가 안 될 때 직결로 전환됩니다.
function FindProxyForURL(url, host) {
// proxy1 -> proxy2 -> 직결 순으로 시도
return "PROXY proxy1.example.com:8080; " +
"PROXY proxy2.example.com:8080; DIRECT";
}관련 도서(PR) 서버의 이중화·부하 분산을 배우고 싶다면. ▶ 아마존에서 찾기
Q6 일부 브라우저에서만 안 된다 / 포트를 생략하면 작동하지 않는다
A. 놓치기 쉬운 것이 포트 생략입니다. 「PROXY proxy.example.com」처럼 포트를 생략하면 일부 브라우저(Firefox 계열 등)에서는 작동하지 않습니다. 기본 80이라도 반드시 「:80」까지 쓰세요. 또한 DIRECT나 PROXY 키워드는 대문자(대소문자 구별)입니다.
포인트 https의 URL은 PAC에 전달되는 시점에 경로와 쿼리가 제거되어 호스트명만 남습니다. URL의 세부 경로로 나누고 싶은 경우, https에서는 판정할 수 없다는 점에 주의하세요.
관련 도서(PR) HTTP나 프로토콜의 구조를 깊이 파고들려면. ▶ 아마존에서 찾기
Q7 PAC 파일을 테스트·디버그하려면?
A. 갑자기 전사에 배포하기 전에, 수중에서 검증합시다. pactester 같은 도구를 쓰면 지정 URL이 어느 프록시로 분배되는지 확인할 수 있습니다. 구분의 기본은, 먼저 브라우저에 프록시를 직접 지정해 보고 PAC를 뺀 상태에서 통신되는지 확인하는 것. 거기서 PAC의 조건을 하나씩 더해 가면 원인을 특정하기 쉬워집니다.
포인트 myIpAddress는 환경(여러 NIC나 VPN)에 따라 예상 밖의 값을 반환할 수 있어, 피하는 것이 무난하다고 여겨집니다.
관련 도서(PR) 네트워크 운용의 실무력을 높이고 싶은 분께. ▶ 아마존에서 찾기
정리
PAC 파일의 문제는 「캐시로 반영되지 않음」 「구문 오류로 전체가 멈춤」 「포트 생략으로 일부 브라우저가 안 됨」 정도가 단골입니다. 곤란할 때는, 먼저 브라우저에서 프록시를 직접 지정해 구분하고, 거기서 PAC의 조건을 더해 가는 것이 지름길입니다. 기본 작성법은 이전 입문 글에 정리해 두었으니 함께 봐 주세요.
로빈 플래닝에서도 지원합니다 사내 네트워크나 프록시 관련 설정·문제 대응 상담도 받고 있습니다. 편하게 문의해 주세요.
면책: 본 기사는 일반적인 정보 제공을 목적으로 한 기술 메모이며 동작을 보증하지 않습니다. 동작은 브라우저·OS·네트워크 환경에 따라 다릅니다. 제휴: Robin Planning은 아마존 어소시에이트 프로그램 참가자이며, 링크를 통한 구매로 소개료를 받을 수 있습니다.



댓글