Sun Java System Web Proxy Server 4.0.8 관리 설명서

17장 클라이언트 자동 구성 파일 사용

여러 클라이언트를 지원하는 프록시 서버가 여러 개 있는 경우 클라이언트 자동 구성 파일을 사용하여 브라우저 클라이언트의 모든 항목을 구성할 수 있습니다. 자동 구성 파일에는 브라우저가 다양한 URL에 액세스할 때 사용하는 프록시(있는 경우)를 결정하는 JavaScript 함수가 포함되어 있습니다.

브라우저를 시작하면 자동 구성 파일이 로드됩니다. 사용자가 링크를 누르거나 URL에 입력할 때마다 브라우저는 구성 파일을 사용하여 프록시를 사용해야 하는지 여부를 결정하고 사용해야 하는 경우 사용할 프록시를 결정합니다. 이 기능을 통해 조직의 브라우저에 대한 모든 인스턴스를 쉽게 구성할 수 있습니다. 자동 구성 파일을 클라이언트로 가져올 수 있는 여러 가지 방법이 있습니다.

다음과 같이 두 가지 방법으로 자동 구성 파일을 만들 수 있습니다. Server Manager의 페이지를 사용하거나 파일을 직접 만들 수 있습니다. 파일을 만들기 위한 지시문에 대해서는 이 장의 뒷부분에서 설명합니다.

이 장은 다음 내용으로 구성되어 있습니다.

자동 구성 파일 이해

또한 Proxy Server를 관리하는 사용자로서 클라이언트 자동 구성 파일을 만들고 배포합니다.

자동 구성 파일의 기능

자동 구성 파일은 클라이언트 및 서버 인터넷 응용 프로그램 개발용 소형 객체 기반 스크립팅 언어인 JavaScript로 작성됩니다. 브라우저는 JavaScript 파일을 해석합니다.

브라우저를 처음으로 로드하면 자동 구성 파일이 다운로드됩니다. 파일은 브라우저가 URL을 사용하여 접근할 수 있는 모든 위치에 보관할 수 있습니다. 예를 들어 파일을 웹 서버에 보관할 수 있습니다. 브라우저가 파일 :// URL을 사용하여 접근할 수 있는 경우 파일을 네트워크 파일 시스템에 보관할 수도 있습니다.

프록시 구성 파일은 JavaScript로 작성됩니다. JavaScript 파일은 브라우저가 각 URL에 대해 사용해야 하는 프록시 서버(있는 경우)를 결정하는 단일 함수(FindProxyForURL이라고 함)를 정의합니다. 브라우저는 브라우저가 실행되고 있는 시스템의 호스트 이름 및 가져올 URL의 두 가지 매개 변수를 JavaScript 함수로 보냅니다. JavaScript 함수는 진행 방법을 알려 주는 브라우저에 값을 반환합니다.

자동 구성 파일을 사용하여 다양한 유형의 URL, 여러 서버 또는 하루 중 다양한 시간에 대해 서로 다른 프록시를 지정하거나 프록시를 전혀 지정하지 않을 수 있습니다. 즉, 여러 개의 세분화된 프록시를 가질 수 있는데, 예를 들면 어떤 한 프록시는 .com 도메인에 서비스를 제공하고 다른 프록시는 .edu 도메인에 서비스를 제공하고 또 다른 프록시는 그 이외의 모든 도메인에 서비스를 제공하는 것과 같습니다. 이 방법을 사용하면 여러 프록시가 모두 동일한 문서를 저장하는 대신 단일 파일 복사본만 캐시에 저장되기 때문에 로드를 나누고 프록시 디스크를 보다 효율적으로 사용할 수 있습니다.

또한 자동 구성 파일은 프록시 페일오버를 지원하기 때문에 프록시 서버를 사용할 수 없는 경우 브라우저가 자연스롭게 다른 프록시 서버로 전환됩니다.

Web Server로 프록시에 액세스

프록시 서버에 하나 이상의 자동 구성 파일을 저장할 수 있으며 프록시 서버가 문서만 자동 구성 파일인 웹 서버의 역할을 수행하게 할 수 있습니다. 이렇게 하면 프록시 관리자가 조직의 클라이언트에 필요한 프록시 자동 구성 파일을 유지 관리할 수 있습니다. 또한 파일을 중앙 위치에 보관할 수 있기 때문에 파일을 업데이트해야 하는 경우 한 번만 업데이트하면 모든 브라우저 클라이언트가 자동으로 업데이트 파일을 얻게 됩니다.

프록시 자동 구성 파일은 server- root/proxy-serverid/pac/ 디렉토리에 보관합니다. 브라우저에서 Proxies 탭에 파일의 URL을 입력하는 프록시 자동 구성 파일에 대한 URL을 입력합니다. 프록시의 URL 형식은 다음과 같습니다.

http://proxy.domain:port/URI

예를 들어 URL은 http://proxy.example.com이 될 수 있습니다. 호스트:포트 조합 다음에 URL의 일부로 URI를 사용하는 경우템플리트를 사용하여 다양한 자동 구성 파일에 대한 액세스를 제어할 수 있습니다. 예를 들어 /proxy.pac라고 하는 자동 구성 파일이 포함된 /test라는 URI를 만드는 경우 자원 패턴이 http://proxy.mysite.com:8080/test/.*인 템플리트를 만들 수 있습니다. 이 템플리트를 사용하여 해당 디렉토리에 적합한 액세스 제어를 설정할 수 있습니다.

자동 구성 파일을 여러 개 만들고 다른 URL을 통해 액세스할 수 있습니다. 다음 표에는 클라이언트가 액세스할 때 사용하는 URI 및 URL의 몇 가지 예가 나와 있습니다.

표 17–1 샘플 URI 및 해당 URL

URI(경로) 

프록시에 대한 URL 

http://proxy.mysite.com 

/employees 

http://proxy.mysite.com/employees 

/group1 

http://proxy.mysite.com/group1 

/managers 

http://proxy.mysite.com/managers 

역방향 프록시에서 PAC 파일 사용

역방향 프록시가 작동하는 방식으로 인해 프록시 서버와 .pac 파일 서버를 사용하기가 쉽지 않습니다. 프록시 서버가 파일 요청을 받는 경우 요청이 로컬 .pac 파일 또는 원격 문서에 대한 것인지 여부를 결정해야 합니다.

프록시 서버가 .pac 파일에 대한 유지 관리 및 서비스를 수행하는 것 이외에 역방향 프록시 역할을 수행하도록 하려면 obj.conf 파일을 편집하여 NameTrans 함수 순서가 정확한지 확인합니다.

프록시 서버가 역방향 프록시 역할을 수행하도록 정규 매핑을 만듭니다. 이것은 일반적으로 프록시에게 모든 요청을 원격 컨텐트 서버로 라우팅하도록 지시합니다. 프록시 자동 구성 파일을 추가하여 /pac 같은 특정 디렉토리에 매핑할 수 있습니다. 이 경우 .pac 파일을 가지는 클라이언트는 다음과 같은 URL을 사용합니다.

http://proxy.mysite.com/pac

주의 – 주의 –

이러한 매핑을 통해 원격 컨텐트 서버에 유사한 디렉토리가 없는지 확인합니다.


프록시 자동 구성 파일의 지시문 및 함수가 다른 매핑 이전에 나타나는지 확인하기 위해 obj.conf 파일을 편집합니다. 프록시 서버는 일반적으로 요청을 수행하기 전에 모든 NameTrans 함수를 통해 실행되기 때문에 지시문과 함수가 먼저 표시되어야 합니다. 그러나 자동 구성 파일을 통해 프록시는 즉시 경로를 인식하고 .pac 파일을 반환합니다.

다음 예는 역방향 프록시를 사용하고 자동 구성 파일을 유지 관리하는 obj.conf 파일입니다.

<Object name="default">
NameTrans from="file:" fn="map" to="ftp:"
NameTrans from="/pac" fn="pac-map" name="file" 
	to="/ns-home/proxy/pac/proxy.pac"
NameTrans fn="redirect" from="http://foo.*" url="http://www.acme.com"
NameTrans from="/ns-icons" fn="pfx2dir" dir="/ns-home/ns-icons" name="file"
NameTrans fn="reverse-map" from="http://web.acme.com" 
	to="http://proxy.acme.com:8080"
NameTrans fn="map" from="http://proxy.acme.com:8080" 
	to="http://web.acme.com"
NameTrans fn="map" from="/" to="http://web.acme.com"
PathCheck fn="url-check"
Service fn="deny-service"
AddLog fn="flex-log" name="access"
AddLog fn="urldb-record"
</Object>

Server Manager 페이지를 사용하여 자동 구성 파일 만들기

ProcedureServer Manager를 사용하여 자동 구성 파일을 만드는 방법

  1. Server Manager에 액세스하고 Routing 탭을 선택합니다.

  2. Create/Edit Autoconfiguration File 링크를 누릅니다.

    나타나는 페이지에 프록시 시스템에 있는 자동 구성 파일이 나열됩니다. 자동 구성 파일을 눌러 편집할 수 있습니다. 나머지 단계에서는 새 파일을 만드는 방법에 대해 설명합니다.

  3. 프록시에서 자동 구성 파일을 가져오는 경우 클라이언트가 사용하는 URL의 경로 부분인 선택적 URI를 입력합니다.

    예를 들어 /를 입력하면 클라이언트가 프록시의 기본 문서(웹 서버의 경우 index.html 파일과 유사함)인 파일에 액세스할 수 있습니다. 자동 구성 파일의 프록시에 액세스하는 경우 클라이언트는 도메인 이름만 사용합니다. 여러 URI를 사용하고 각 URI에 대해 별도의 자동 구성 파일을 만들 수 있습니다.

  4. .pac 확장자를 사용하여 자동 구성 파일의 이름을 입력합니다.

    파일이 하나인 경우 간단하게 proxy.pac(pac는 프록시 자동 구성의 줄임말)로 지정합니다. 모든 자동 구성 파일은 단일 JavaScript 함수를 가진 ASCII 텍스트 파일입니다.

  5. OK를 누릅니다. 다른 페이지가 나타납니다.

    이 페이지를 사용하여 자동 구성 파일을 만듭니다. 페이지의 항목이 클라이언트에 의해 순서대로 수행됩니다. 페이지의 항목은 다음과 같습니다.

    • Never Go Direct To Remote Server는 브라우저가 항상 프록시를 사용하도록 지시합니다. 프록시 서버가 실행되지 않는 경우 사용할 두 번째 프록시 서버를 지정할 수 있습니다.

    • Go Direct To Remote Server When은 프록시 서버를 우회할 경우를 결정합니다. 브라우저는 페이지에 옵션이 나열된 순서대로 이러한 경우를 결정합니다.

    • Connecting To Non-fully Qualified Host Names는 사용자가 컴퓨터 이름만 지정한 경우 브라우저를 직접 서버로 보냅니다. 예를 들어 내부 웹 서버를 winternal.mysite.com이라고 할 경우 사용자는 정규화된 도메인 이름 대신 http://winternal만 입력할 수 있습니다. 이 경우 브라우저가 프록시 대신 웹 서버로 직접 이동합니다.

    • Connecting To A Host In Domain을 사용하여 브라우저가 직접 액세스할 수 있는 도메인 이름을 세 개까지 지정할 수 있습니다. 도메인을 지정할 때는 점 문자로 시작합니다. 예를 들어 .example.com을 입력할 수 있습니다.

    • Connecting To A Resolvable Host는 클라이언트가 호스트를 확인할 수 있는 경우 브라우저를 직접 서버로 보냅니다. 이 옵션은 일반적으로 로컬(내부) 호스트만 확인하도록 DNS를 설정한 경우 사용됩니다. 로컬 네트워크 외부의 서버에 연결하는 경우 클라이언트는 프록시 서버를 사용합니다.


      주의 – 주의 –

      이 옵션은 클라이언트가 모든 요청에 대해 DNS를 참조해야 하기 때문에 클라이언트에 의해 확인된 성능에 부정적인 영향을 줍니다.


    • Connecting To A Host In Subnet은 클라이언트가 특정 서브넷의 서버에 액세스하는 경우 브라우저를 직접 서버로 보냅니다. 이 옵션은 조직의 서브넷이 여러 지역에 분포되어 있는 경우 유용합니다. 예를 들어 몇몇 회사가 전 세계의 여러 서브넷에 적용되는 단일 도메인 이름을 가질 수 있지만 각 서브넷은 특정 지역에만 관련됩니다.


      주의 – 주의 –

      이 옵션은 클라이언트가 모든 요청에 대해 DNS를 참조해야 하기 때문에 클라이언트에 의해 확인된 성능에 부정적인 영향을 줍니다.


    • Except When Connecting To Hosts를 사용하여 서버로 직접 이동하는 규칙에 대한 예외를 지정할 수 있습니다. 예를 들어 직접 이동할 도메인으로 .example.com을 입력한 경우 home.example.com으로 이동하기 위한 예외를 만들 수 있습니다. 그러면 브라우저는 home.example.com으로 이동할 때 프록시를 사용하지만 example.com 도메인의 다른 서버로 직접 이동합니다.

    • Secondary Failover Proxy는 프록시 서버가 실행되지 않는 경우 사용할 두 번째 프록시를 지정합니다.

    • Failover Direct는 프록시 서버가 실행되지 않는 경우 브라우저를 직접 서버로 보냅니다. 보조 페일오버 프록시를 지정한 경우 Navigator는 서버로 직접 이동하기 전에 두 번째 프록시 서버를 시도합니다.

  6. OK를 눌러 자동 구성 파일을 만듭니다.

    파일은 server-root/proxy-server id/pac 디렉토리에 저장됩니다.

    파일이 제대로 만들어졌다는 확인 메시지가 나타납니다. 위의 단계를 반복하여 필요한 수만큼 자동 구성 파일을 만듭니다.

    자동 구성 파일을 만들었으면 프록시 서버를 사용하는 모든 사용자에게 올바른 자동 구성 파일을 지정하거나 브라우저 복사본을 구성하도록 알려 주어야 합니다.

수동으로 자동 구성 파일 만들기

이 절에서는 수동으로 자동 구성 파일을 만드는 방법에 대해 설명합니다.

프록시 자동 구성 파일은 클라이언트 측 JavaScript를 사용하여 작성됩니다. 각 파일에는 브라우저가 각 URL에 대해 사용해야 하는 프록시 서버(있는 경우)를 결정하는 FindProxyForURL()이라고 하는 단일 JavaScript 함수가 포함되어 있습니다. 브라우저는 브라우저가 실행되고 있는 시스템의 호스트 이름 및 두 가지 매개 변수로 보냅니다. JavaScript 함수는 진행 방법을 알려 주는 Navigator에 값을 반환합니다. 다음 절에서는 함수 구문과 가능한 반환 값에 대해 설명합니다.

FindProxyForURL() 함수

FindProxyFor() URL 함수의 구문은 다음과 같습니다.

function FindProxyForURL(url, host){   ...}

브라우저가 액세스하는 모든 URL의 경우 다음과 같은 방법으로 urlhost 매개 변수를 보내고 함수를 호출합니다.

ret = FindProxyForURL(url, host);

url은 브라우저에서 액세스되는 전체 URL입니다.

host는 액세스되는 URL에서 추출된 호스트 이름입니다. 이것은 편의상의 방법일 뿐이며 :// 및 첫 번째 : 또는 그 다음의 / 사이의 동일한 문자열입니다. 포트 번호는 이 매개 변수에 포함되지 않으며 필요한 경우 URL에서 추출할 수 있습니다.

ret(반환 값)는 구성을 설명하는 문자열입니다.

함수 반환 값

자동 구성 파일에는 FindProxyForURL() 함수가 포함되어 있습니다. 이 함수는 액세스할 클라이언트 호스트 이름과 URL을 매개 변수로 사용합니다. 함수는 브라우저에게 진행 방법을 지시하는 단일 문자열을 반환합니다. 문자열이 null인 경우 프록시를 사용하지 않아야 합니다. 다음 표에 표시된 구성 블록을 세미 콜론으로 구분하여 문자열에 포함시킬 수 있습니다.

표 17–2 FindProxyForURL() 반환 값

반환 값 

브라우저 결과 작업 

DIRECT

프록시를 통해 이동하지 않고 서버에 직접 연결합니다. 

PROXY host:port

지정된 프록시와 포트 번호를 사용합니다. 여러 값을 세미 콜론으로 구분한 경우 첫 번째 프록시가 사용됩니다. 해당 프록시가 실패할 경우 다음 프록시가 차례대로 사용됩니다. 

SOCKS host:port

지정된 SOCKS 서버를 사용합니다. 여러 값을 세미 콜론으로 구분한 경우 첫 번째 프록시가 사용됩니다. 해당 프록시가 실패할 경우 다음 프록시가 차례대로 사용됩니다. 

브라우저가 사용할 수 없는 프록시 서버에 연결된 경우 브라우저는 자동으로 30분 후, 1시간 후 등과 같이 30분 간격으로 이전에 응답하지 않는 프록시와 연결을 다시 시도합니다. 따라서 일시적으로 프록시 서버를 중단한 경우 클라이언트는 다시 시작한 이후 30분 내에 프록시 사용을 다시 시작합니다.

모든 프록시가 종료되고 DIRECT 반환 값이 지정되지 않을 경우 브라우저는 일시적으로 프록시를 무시하고 대신 직접 연결을 시도할지 여부를 사용자에게 묻는 메시지를 표시합니다. 브라우저는 프록시가 20분 후, 다시 20분 후 등과 같이 20분 간격으로 다시 시도할지 여부를 묻습니다.

다음 예에서 반환 값은 브라우저에게 포트 8080에서 w3proxy.example.com이라는 프록시를 사용할 것을 지시합니다. 해당 프록시를 사용할 수 없는 경우 브라우저는 다음과 같이 포트 8080에서 proxy1.example.com 이라는 프록시를 사용합니다.

PROXY w3proxy.example.com:8080; PROXY proxy1.example.com:8080

다음 예에서 기본 프록시는 w3proxy.example.com:8080 입니다. 해당 프록시를 사용할 수 없는 경우 브라우저는 proxy1.example.com:8080을 사용합니다. 두 개의 프록시를 모두 사용할 수 없는 경우 브라우저가 직접 서버로 이동합니다. 20분 이후 브라우저는 사용자에게 첫 번째 프록시를 다시 시도할지 여부를 묻습니다.

PROXY w3proxy.example.com:8080; PROXY proxy1.example.com:8080; DIRECT

JavaScript 함수 및 환경

JavaScript 언어에는 프록싱 사용에 유용한 미리 정의된 함수와 환경 조건이 있습니다. 이러한 각 함수는 특정 조건을 만족하는지 여부를 확인한 다음 true 또는 false 값을 반환합니다. 관련 유틸리티 함수는 DNS 호스트 이름 또는 IP 주소를 반환하기 때문에 예외입니다. 기본 FindProxyForURL () 함수에서 이러한 함수를 사용하여 브라우저에 보낼 반환 값을 결정할 수 있습니다. 이 장의 뒷부분에서는 이러한 함수 사용에 대한 개념을 예를 들어 설명합니다.

각 함수 또는 환경 조건에 대해서는 이 절에서 설명합니다. 브라우저와 프록시 통합에 적용된 함수 및 환경 조건은 다음과 같습니다.

호스트 이름 기반 함수

호스트 이름 기반 함수를 통해 호스트 이름 또는 IP 주소를 사용하여 어떤 프록시(있는 경우)를 사용할지 결정할 수 있습니다.

dnsDomainIs()(호스트, 도메인)

dnsDomainIs()() 함수는 URL 호스트 이름이 지정된 DNS 도메인에 속하는지 여부를 확인합니다. 이 함수는 예 1: 로컬 호스트를 제외한 모든 서버 프록시 예 2: 방화벽 외부의 로컬 서버 프록시에 설명된 대로 로컬 도메인에 대해 프록시를 사용하지 않도록 브라우저를 구성하는 경우 유용합니다.

또한 이 함수는 요청을 수신하는 프록시가 URL이 속한 DNS 도메인을 기준으로 프록시 그룹에서 선택된 경우 로드 균형 조정을 위해 여러 프록시를 사용할 때 유용합니다. 예를 들어 .edu가 포함된 URL을 특정 프록시에 연결하고 .com이 포함된 URL을 다른 프록시로 연결하여 로드 균형을 조정하는 경우 dnsDomainIs()()를 사용하여 URL 호스트 이름을 확인할 수 있습니다.

매개 변수

host는 URL의 호스트 이름입니다.

domain은 호스트 이름을 테스트하기 위한 도메인 이름입니다.

반환 값

true 또는 false

다음 문은 true입니다.

dnsDomainIs("www.example.com", ".example.com")

다음 문은 false입니다.

dnsDomainIs("www", ".example.com") dnsDomainIs("www.mcom.com", 
	".example.com")

isInNet()(호스트, 패턴, 마스크)

isInNet()() 함수를 사용하여 IP 주소에 대한 URL 호스트 이름을 확인하고 마스크에 의해 지정된 서브넷에 속하는지 여부를 테스트할 수 있습니다. 이것은 SOCKS가 사용하는 IP 주소 패턴 일치 유형과 동일합니다. 예 4: 서브넷에 직접 연결을 참조하십시오.

매개 변수:

host는 DNS 호스트 이름 또는 IP 주소입니다. 호스트 이름이 통과되면 이 함수는 호스트 이름을 IP 주소로 확인합니다.

pattern은 점으로 구분된 형식의 IP 주소 패턴입니다.

mask는 일치해야 하는 IP 주소의 부분을 결정하는 IP 주소 패턴 마스크입니다. 0 값은 무시를, 255는 일치를 의미합니다. 이 함수는 호스트의 IP 주소가 지정된 IP 주소 패턴과 일치할 경우 true입니다.

반환 값

true 또는 false

이 문은 호스트의 IP 주소가 정확하게 198.95.249.79와 일치하는 경우에만 true입니다.

isInNet(host, "198.95.249.79", "255.255.255.255")

이 문은 호스트의 IP 주소가 198.95.*와 일치하는 경우에만 true입니다.*: isInNet(host, "198.95.0.0", "255.255.0.0")

isPlainhost name()(호스트)

isPlainhost name()() 함수는 요청한 URL의 호스트 이름이 일반 호스트 이름 또는 정규화된 도메인 이름인지 여부를 확인합니다. 이 함수는 예 1: 로컬 호스트를 제외한 모든 서버 프록시 예 2: 방화벽 외부의 로컬 서버 프록시에 설명된 대로 브라우저를 로컬 서버에 직접 연결하려는 경우 유용합니다.

매개 변수

host는 호스트 이름에 도메인 이름이 없는 경우(점으로 구분된 세그먼트 없음)에만 포트 번호를 제외하고 URL의 호스트 이름입니다.

반환 값

host가 로컬인 경우 true이고 host가 원격인 경우 false입니다.

isPlainhost name("host")

hostwww와 같은 문자열인 경우 함수는 true를 반환합니다. 호스트가 www.example.com과 같은 문자열인 경우 함수는 false를 반환합니다.

isResolvable()(호스트)

방화벽 내의 DNS가 내부 호스트만 인식하는 경우 isResolvable()() 함수를 사용하여 호스트 이름이 네트워크에 대해 내부 또는 외부인지 여부를 테스트할 수 있습니다. 이 함수를 사용하면 내부 서버에 대한 직접 연결을 사용하고 외부 서버에 대해서만 프록시를 사용하도록 브라우저를 구성할 수 있습니다. 이 함수는 방화벽 내의 내부 호스트가 다른 내부 호스트의 DNS 도메인 이름을 확인할 수 있지만 모든 외부 호스트를 확인할 수 없는 사이트에서 유용합니다. isResolvable()() 함수는 DNS를 참조하여 호스트 이름을 IP 주소로 확인하려고 합니다. 예 3: 확인되지 않은 호스트만 프록시를 참조하십시오.

매개 변수

host()는 URL의 호스트 이름입니다.

반환 값

함수가 호스트 이름을 확인할 수 있는 경우 true이고 확인할 수 없으면 false입니다.

isResolvable("host")

host()www와 같은 문자열이고 DNS를 통해 확인할 수 있는 경우 이 함수는 true를 반환합니다.

localHostOrDomainIs()(호스트, 호스트 도메인)

localHostOrDomainIs()() 함수는 정규화된 도메인 이름 또는 일반 호스트 이름으로 액세스할 수 있는 로컬 호스트를 지정합니다. 예 2: 방화벽 외부의 로컬 서버 프록시를 참조하십시오.

호스트 이름이 지정된 호스트 이름과 정확하게 일치하거나 정규화되지 않은 호스트 이름과 일치하는 호스트 이름에 도메인 이름 부분이 없는 경우 localHostOrDomainIs()() 함수는 true를 반환합니다.

매개 변수

host는 URL의 호스트 이름입니다.

hostdom은 일치하는 정규화된 호스트 이름입니다.

반환 값

true 또는 false

다음 문은 true(정확히 일치)입니다.

localHostOrDomainIs("www.example.com", "www.example.com")

다음 문은 true(호스트 이름 일치, 도메인 이름 지정되지 않음)입니다.

localHostOrDomainIs("www", "www.example.com")

다음 문은 false(도메인 이름 불일치)입니다.

localHostOrDomainIs("www.mcom.com", "www.example.com")

다음 문은 false(호스트 이름 불일치)입니다.

localHostOrDomainIs("home.example.com", "www.example.com")

유틸리티 함수

유틸리티 함수를 사용하여 도메인 수준, 브라우저가 실행 중인 호스트 또는 호스트의 IP 주소를 찾을 수 있습니다.

dnsDomainLevels()(hot)

dnsDomainLevels()() 함수는 URL 호스트 이름에서 DNS 수준 번호(점의 수)를 찾습니다.

매개 변수

host는 URL의 호스트 이름입니다.

반환 값

DNS 도메인 수준의 번호(정수)입니다.

dnsDomainLevels("www")는 0을 반환합니다.

dnsDomainLevels("www.example.com")는 2를 반환합니다.

dnsResolve()(host)

dnsResolve()() 함수는 보통 URL로부터 제공되는 호스트의 IP 주소를 확인합니다. 이 함수는 JavaScript 함수가 기존 함수로 수행할 수 있는 것보다 고급 패턴 일치를 수행해야 하는 경우 유용합니다.

매개 변수

host는 확인할 호스트 이름입니다. 지정된 DNS 호스트 이름을 IP 주소로 확인하고 점으로 구분된 형식으로 문자열로 반환합니다.

반환 값

문자열 값인 점으로 구분된 네 개의 IP 주소

다음 예에서는 문자열 198.95.249.79를 반환합니다.

dnsResolve("home.example.com")

myIpAddress()()

myIpAddress()() 함수는 브라우저가 실행되는 호스트에 따라 JavaScript 함수가 다르게 동작해야 하는 경우 유용합니다. 이 함수는 브라우저를 실행하는 컴퓨터의 IP 주소를 반환합니다.

반환 값

문자열 값인 점으로 구분된 네 개의 IP 주소

예:

다음 예에서는 컴퓨터 home.example.com에서 Navigator를 실행하는 경우 문자열 198.95.249.79를 반환합니다.

myIpAddress()

URL/호스트 이름 기반 조건

로드 균형 조정 및 라우팅을 위해 호스트 이름 또는 URL을 일치시킬 수 있습니다.

shExpMatch()(str, shexp)

shExpMatch()() 함수는 URL 호스트 이름 또는 URL 자체를 일치시킵니다. 이 함수는 로드 균형 조정 및 서로 다른 프록시 서버에 대한 URL의 지능적 라우팅에 주로 사용됩니다.

매개 변수

str은 비교할 문자열입니다(예: URL 또는 호스트 이름).

shexp는 비교할 쉘 표현식입니다.

이 표현식은 문자열이 지정된 쉘 표현식과 일치하는 경우 true입니다. 예 6: shExpMatch()()를 통한 프록시 로드 균형 조정을 참조하십시오.

반환 값

true 또는 false

첫 번째 예에서는 true를 반환합니다. 두 번째 예에서는 false를 반환합니다.

shExpMatch("http://home.example.com/people/index.html",
            ".*/people/.*")
shExpMatch("http://home.example.com/people/yourpage/index.html",
            ".*/mypage/.*")

시간 기반 조건

날짜, 시간 또는 요일에 따라 FindProxyForURL 함수가 다르게 동작하도록 할 수 있습니다.

dateRange()(일, 월, 년...)

dateRange()() 함수는 예를 들어 1996년 4월 19일부터 1996년 5월 3일과 같이 특정 날짜 또는 날짜 범위를 검색합니다. 이 함수는 예를 들어 한 프록시에 대해 정기적으로 유지 보수 중단 시간이 예약된 경우와 같이 요일에 따라 FindProxyForURL() 함수가 다르게 작동하게 하려는 경우 유용합니다.

날짜 범위는 여러 가지 방법으로 지정할 수 있습니다

dateRange(day)dateRange(day1, day2)dateRange(mon)dateRange(month1, month2)dateRange(year)dateRange(year1, year2)dateRange(day1, month1, day2, month2)dateRange(month1, year1, month2, year2)dateRange(day1, month1, year1, day2, month2, year2)dateRange(day1, month1, year1, day2, month2, year2, gmt)

매개 변수

day는 일에 대한 1에서 31 사이의 정수입니다.

month는 다음 월 문자열 중 하나입니다. JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC

year는 연도 숫자에 대한 네 자리 정수입니다(예: 1996).

gmt는 그리니치 표준시에서 시간 비교가 수행되어야 하는 문자열 “GMT”이거나 시간을 로컬 시간대로 가정하기 위해 비어 있는 상태로 둡니다. GMT 매개 변수는 호출 프로필에서 항상 마지막 매개 변수로 지정할 수 있습니다. 각 범주(일, 월, 년)에서 단일 값만 지정할 경우 함수는 해당 사양과 일치하는 날짜에 대해 true 값만 반환합니다. 두 개의 값을 지정하면 결과는 지정된 첫 번째 시간에서 지정된 두 번째 시간 사이에 true입니다.

다음 문은 매월 로컬 시간대의 첫째 날에 대해 true입니다. dateRange(1)

다음 문은 매월 그리니치 표준시의 첫째 날에 대해 true입니다. dateRange(1, "GMT")

다음 문은 매월 상반기에 대해 true입니다. dateRange(1, 15)

다음 문은 매년 12월 24일에 대해 true입니다. dateRange(24, "DEC")

다음 문은 1995년 12월 24일에 대해 true입니다. dateRange(24, "DEC", 1995)

다음 문은 1사분기 동안 true입니다. dateRange("JAN", "MAR")

다음 문은 매년 6월 1일부터 8월 15 사이에 true입니다. dateRange(1, "JUN", 15, "AUG")

다음 문은 1995년 6월 1일부터 1995년 8월 15일 사이에 true입니다. dateRange(1, "JUN", 15, 1995, "AUG", 1995)

다음 문은 1995년 10월부터 1996년 3월 사이에 true입니다. dateRange("OCT", 1995, "MAR", 1996)

다음 문은 1995년 동안 계속 true입니다. dateRange(1995)

다음 문은 1995년 1월1일부터 1997년 마지막까지 true입니다. dateRange(1995, 1997)

timeRange (시, 분, 초...)

timeRange() 함수는 예를 들어 오후 9시에서 오전 12 사이와 같이 특정 시간 또는 시간 범위를 검색합니다. 이 함수는 시간에 따라 FindProxyForURL() 함수가 다르게 작동하게 하려는 경우 유용합니다.

timeRange(hour)timeRange(hour1, hour2)timeRange(hour1, min1, hour2, min2)timeRange(hour1, min1, sec1, hour2, min2, sec2)

매개 변수:

hour는 0에서 23 사이의 시간입니다. 0은 자정이고 23은 오후 11시입니다.

min은 0에서 59 사이의 분 값입니다.

sec는 0에서 59 사이의 초 값입니다.

gmt는 GMT 시간대의 GMT 문자열이거나 로컬 시간대에 대해 지정되지 않습니다. 다음 매개 변수는 각 매개 변수 프로필과 함께 사용할 수 있으며 항상 마지막 매개 변수입니다.

반환 값

true 또는 false

예:

다음 문은 정오부터 오후 1시 사이에 true입니다.m: timerange(12, 13)

다음 문은 GMT 기준으로 정오부터 오후 12시 59분 사이에 true입니다. timerange(12, "GMT")

다음 문은 오전 9시부터 오후 5시 사이에 true입니다.m: timerange(9, 17)

다음 문은 자정부터 자정에서 30초 경과한 시간 사이에 true입니다. timerange(0, 0, 0, 0, 0, 30)

weekdayRange()(wd1, wd2, gmt)

weekdayRange() 함수는 월요일에서 금요일 사이와 같이 특정 요일 또는 요일 범위를 검색합니다. 이 함수는 요일에 따라 FindProxyForURL 함수가 다르게 작동하게 하려는 경우 유용합니다.

매개 변수

wd1wd2는 다음 요일 문자열 중 하나입니다. SUN MON TUE WED THU FRI SAT

gmt는 그리니치 표준시의 경우 GMT이거나 로컬 시간의 경우 그대로 둡니다.

첫 번째 매개 변수 wd1만 필수 사항입니다. wd2, gmt 또는 두 개 모두 비워 둘 수 있습니다.

하나의 매개 변수만 있는 경우 함수는 매개 변수가 표시하는 요일에 true 값을 반환합니다. 문자열 GMT가 두 번째 매개 변수로 지정된 경우 시간이 GMT로 제공됩니다. 그렇지 않을 경우 시간은 로컬 시간대로 제공됩니다.

wd1wd2가 모두 정의된 경우 조건은 현재 요일이 이 두 요일 사이에 있을 경우 true입니다. 경계값도 포함됩니다. 매개 변수의 순서가 중요합니다. “MON,” “WED”는 월요일부터 수요일 사이지만 “WED,” “MON”은 수요일부터 다음 주 월요일 사이입니다.

다음 문은 월요일부터 금요일(로컬 시간대) 사이에 true입니다. weekdayRange("MON", "FRI")

다음 문은 그리니치 표준시로 월요일부터 금요일 사이에 true입니다. weekdayRange("MON", "FRI", "GMT")

다음 문은 로컬 시간으로 매주 토요일마다 true입니다.weekdayRange("SAT")

다음 문은 그리니치 표준 시간으로 매주 토요일마다 true입니다.weekdayRange("SAT", "GMT")

다음 문은 금요일부터 월요일 사이에 true입니다(순서가 중요함) weekdayRange("FRI", "MON")

함수 예

다음 절에서는 JavaScript 함수에 대해 예를 들어 자세히 설명합니다.

예 1: 로컬 호스트를 제외한 모든 서버 프록시

이 예에서는 브라우저가 정규화되지 않은 모든 호스트와 로컬 도메인에 있는 호스트에 직접 연결합니다. 다른 모든 호스트는 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";
    }

예 2: 방화벽 외부의 로컬 서버 프록시

이 예는 예 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.commerchant.example.com도 프록시를 통해 연결됩니다.

예외 순서는 효율성을 향상시킵니다. localHostOrDomainIs()() 함수는 모든 URL이 아닌 로컬 도메인에 있는 URL에 대해서만 실행됩니다. 특히 and 표현식 앞에 있는 or 표현식 주위의 괄호에 주의하십시오.

예 3: 확인되지 않은 호스트만 프록시

이 예는 내부 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";
    }

예 4: 서브넷에 직접 연결

이 예에서는 지정된 서브넷의 모든 호스트가 직접 연결됩니다. 다른 호스트는 프록시를 통해 연결됩니다.

    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";
    }

예 5: dnsDomainIs()()로 프록시 로드 균형 조정

이 예는 훨씬 복잡합니다. 이 예에서는 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";
}

예 6: shExpMatch()()를 통한 프록시 로드 균형 조정

이 예는 기본적으로 예 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";
    }

예 7: 특정 프로토콜 프록싱

특정 프로토콜에 대해 프록시를 설정할 수 있습니다. 대부분의 표준 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;
    }
    ...