Show Menu
화제×

Dispatcher 구성

Dispatcher 버전은 AEM과 독립적입니다. 이전 버전의 AEM에 대한 설명서에 포함된 Dispatcher 설명서에 대한 링크를 따라간 경우 이 페이지로 리디렉션되었을 수 있습니다.
다음 섹션에서는 Dispatcher의 다양한 측면을 구성하는 방법에 대해 설명합니다.

IPv4 및 IPv6 지원

AEM 및 Dispatcher의 모든 요소는 IPv4 및 IPv6 네트워크 모두에 설치할 수 있습니다. IPV4 및 IPV6을 참조하십시오.

발송자 구성 파일

설치 중에 이 파일의 이름과 위치를 변경할 수 있지만 기본적으로 Dispatcher 구성은 dispatcher.any 텍스트 파일에 저장됩니다.
구성 파일에는 Dispatcher의 동작을 제어하는 일련의 단일 값 또는 다중 값 속성이 포함되어 있습니다.
  • 속성 이름 앞에 슬래시가 붙습니다 / .
  • 다중 값 속성은 중괄호를 사용하여 하위 항목을 묶습니다 { } .
예제 구성은 다음과 같이 구성됩니다.
# name of the dispatcher
/name "internet-server"

# each farm configures a set off (loadbalanced) renders
/farms
 {
  # first farm entry (label is not important, just for your convenience)
   /website 
     {  
     /clientheaders
       {
       # List of headers that are passed on
       }
     /virtualhosts
       {
       # List of URLs for this Web site
       }
     /sessionmanagement 
       {
       # settings for user authentification
       }
     /renders
       {
       # List of AEM instances that render the documents
       }
     /filter
       {
       # List of filters
       }
     /vanity_urls
       {
       # List of vanity URLs
       }
     /cache
       {
       # Cache configuration
       /rules
         {
         # List of cachable documents
         }
       /invalidate
         {
         # List of auto-invalidated documents
         }
       }
     /statistics
       {
       /categories
         {
         # The document categories that are used for load balancing estimates
         }
       }
     /stickyConnectionsFor "/myFolder"
     /health_check
       {
       # Page gets contacted when an instance returns a 500
       }
     /retryDelay "1"
     /numberOfRetries "5"
     /unavailablePenalty "1"
     /failover "1"
     }
 }

구성에 기여하는 다른 파일을 포함할 수 있습니다.
  • 구성 파일이 큰 경우 여러 개의 작은 파일로 분할할 수 있습니다(관리가 더 쉬워짐).
  • 자동으로 생성된 파일을 포함합니다.
예를 들어 /farms 구성에 myFarm.any 파일을 포함하려면 다음 코드를 사용합니다.
/farms
  {
  $include "myFarm.any"
  }

별표("*")를 와일드카드로 사용하여 포함할 파일 범위를 지정합니다.
예를 들어, farm_1.any 까지 전달되는 파일에 팜 1~5의 farm_5.any 구성이 포함되어 있으면 다음과 같이 포함시킬 수 있습니다.
/farms
  {
  $include "farm_*.any"
  }

환경 변수 사용

값을 하드 코딩하는 대신 dispatcher.any 파일에서 문자열 값 속성에 환경 변수를 사용할 수 있습니다. 환경 변수의 값을 포함하려면 형식을 ${variable_name} 사용합니다.
예를 들어 dispatcher.any 파일이 캐시 디렉토리와 동일한 디렉토리에 있는 경우 docroot 속성에 대해 다음 값을 사용할 수 있습니다.
/docroot "${PWD}/cache"

또 다른 예로, AEM 게시 인스턴스의 호스트 이름을 PUBLISH_IP 저장하는 환경 변수를 만드는 경우 /renders 속성의 다음 구성을 사용할 수 있습니다.
/renders {
  /0001 {
    /hostname "${PUBLISH_IP}"
    /port "8443"
  }
}

발송자 인스턴스 이름 지정

/name 속성을 사용하여 Dispatcher 인스턴스를 식별하는 고유한 이름을 지정합니다. 이 /name 속성은 구성 구조의 최상위 속성입니다.

팜 정의

/farms 속성은 하나 이상의 Dispatcher 비헤이비어 집합을 정의하며, 각 세트는 다른 웹 사이트 또는 URL과 연결됩니다. 이 /farms 숙박 시설은 단일 팜 또는 여러 농장을 갖추고 있습니다.
  • Dispatcher가 모든 웹 페이지 또는 웹 사이트를 동일한 방식으로 처리하도록 하려면 단일 팜을 사용합니다.
  • 웹 사이트 또는 다른 웹 사이트의 다른 영역에 다른 디스패처 동작이 필요한 경우 여러 팜을 만들 수 있습니다.
/farms 속성은 구성 구조의 최상위 속성입니다. 팜을 정의하려면 속성에 자식 속성을 추가합니다. /farms Dispatcher 인스턴스 내에서 팜을 고유하게 식별하는 속성 이름을 사용합니다.
/farmname 속성은 다중 값이며 발송자 동작을 정의하는 다른 속성이 포함되어 있습니다.
  • 팜이 적용되는 페이지의 URL입니다.
  • 문서 렌더링에 사용할 하나 이상의 서비스 URL(일반적으로 AEM 게시 인스턴스)입니다.
  • 여러 문서 렌더러를 로드 밸런싱하는 데 사용할 통계입니다.
  • 캐싱할 파일 및 위치와 같은 기타 몇 가지 동작
이 값에는 영숫자(a-z, 0-9) 문자가 포함될 수 있습니다. 다음 예에서는 and라는 두 팜의 뼈대 정의를 /daycom 보여 줍니다 /docsdaycom .
#name of dispatcher
/name "day sites"

#farms section defines a list of farms or sites
/farms
{
   /daycom
   {
       ...
   }
   /docdaycom
   {
      ...
   }
}

둘 이상의 렌더링 팜을 사용하는 경우 목록이 상향으로 평가됩니다. 이는 웹 사이트의 가상 호스트를 정의할 때 특히 관련이 있습니다.
각 팜 속성에는 다음 자식 속성이 포함될 수 있습니다.
속성 이름
설명
기본 홈 페이지(선택 사항)(IIS만 해당)
전달하려는 클라이언트 HTTP 요청의 헤더입니다.
이 팜의 가상 호스트입니다.
세션 관리 및 인증 지원
렌더링된 페이지를 제공하는 서버(일반적으로 AEM 게시 인스턴스).
Dispatcher가 액세스를 허용하는 URL을 정의합니다.
별칭 URL에 대한 액세스를 구성합니다.
신디케이션 요청 전달을 지원합니다.
캐싱 동작을 구성합니다.
부하 균형 계산을 위한 통계 카테고리 정의
고정 문서가 들어 있는 폴더입니다.
서버 가용성을 확인하는 데 사용할 URL입니다.
실패한 연결을 다시 시도하기 전의 지연.
로드 밸런싱 계산에 대한 통계에 영향을 주는 벌칙입니다.
원래 요청이 실패하면 요청을 다른 렌더링으로 다시 보냅니다.
권한 구분 캐싱의 경우 보안 컨텐츠 캐싱을 참조하십시오 .

기본 페이지 지정(IIS만 해당) - /homepage

매개 /homepage 변수(IIS만 해당)가 더 이상 작동하지 않습니다. 대신 IIS URL 다시 작성 모듈을 사용해야 합니다 .
Apache를 사용하는 경우 mod_rewrite 모듈을 사용해야 합니다. 자세한 내용은 Apache 웹 사이트 설명서를 mod_rewrite 참조하십시오(예: Apache 2.4 ). 사용 mod_rewrite 시, 'passthrough|PT'(다음 처리기로 통과) ​플래그를 사용하여 다시 작성 엔진을 강제 사용하여 내부 uri 구조의 request_rec 필드를 filename 필드 값으로 설정하는 것이 좋습니다.

통과 HTTP 헤더 지정

/clientheaders 속성은 Dispatcher가 클라이언트 HTTP 요청에서 렌더러(AEM 인스턴스)로 전달하는 HTTP 헤더 목록을 정의합니다.
기본적으로 Dispatcher는 표준 HTTP 헤더를 AEM 인스턴스로 전달합니다. 경우에 따라 추가 헤더를 전달하거나 특정 헤더를 제거할 수 있습니다.
  • AEM 인스턴스에서 HTTP 요청에 필요한 사용자 지정 헤더와 같은 헤더를 추가합니다.
  • 웹 서버와 관련된 인증 헤더와 같은 헤더를 제거합니다.
헤더가 전달되도록 헤더 세트를 사용자 지정하는 경우, 일반적으로 기본적으로 포함되는 헤더 목록을 포함하여 전체 헤더 목록을 지정해야 합니다.
예를 들어 게시 인스턴스에 대한 페이지 활성화 요청을 처리하는 Dispatcher 인스턴스에는 PATH 섹션의 /clientheaders 헤더가 있어야 합니다. 이 PATH 헤더를 사용하면 복제 에이전트와 디스패처 간에 통신이 가능합니다.
다음 코드는 /clientheaders 다음과 같은 구성의 예입니다.
/clientheaders
  {
  "CSRF-Token"
  "X-Forwarded-Proto"
  "referer"
  "user-agent"
  "authorization"
  "from"
  "content-type"
  "content-length"
  "accept-charset"
  "accept-encoding"
  "accept-language"
  "accept"
  "host"
  "if-match"
  "if-none-match"
  "if-range"
  "if-unmodified-since"
  "max-forwards"
  "proxy-authorization"
  "proxy-connection"
  "range"
  "cookie"
  "cq-action"
  "cq-handle"
  "handle"
  "action"
  "cqstats"
  "depth"
  "translate"
  "expires"
  "date"
  "dav"
  "ms-author-via"
  "if"
  "lock-token"
  "x-expected-entity-length"
  "destination"
  "PATH"
  }

가상 호스트 식별

/virtualhosts 속성은 Dispatcher가 이 팜에 대해 허용하는 모든 호스트 이름/URI 조합 목록을 정의합니다. 별표("*") 문자를 와일드카드로 사용할 수 있습니다. / 속성에 대한 값은 다음 형식을 사용합니다 virtualhosts .
[scheme]host[uri][*]

  • scheme :(선택 사항) https:// 또는 https://.
  • host :호스트 컴퓨터의 이름 또는 IP 주소와 필요한 경우 포트 번호입니다. (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23 참조 )
  • uri :(선택 사항) 리소스의 경로입니다.
다음 구성 예제에서는 내 회사의 .com 및 .ch 도메인에 대한 요청과 mySubDivision의 모든 도메인을 처리합니다.
   /virtualhosts
    {
    "www.myCompany.com"
    "www.myCompany.ch"
    "www.mySubDivison.*"
    }

다음 구성은 모든 요청을 처리합니다.
   /virtualhosts
    {
    "*"
    }

가상 호스트 해결

Dispatcher가 HTTP 또는 HTTPS 요청을 받으면 해당 요청에 가장 잘 일치하는 가상 호스트 host, 값과 uri 요청의 scheme 헤더를 찾습니다. Dispatcher는 다음 순서로 virtualhosts 속성의 값을 평가합니다.
  • 디스패처는 가장 낮은 팜에서 시작하여 dispatcher.any 파일에서 위쪽으로 진행됩니다.
  • 각 팜에 대해 Dispatcher는 속성의 최상위 값으로 시작하여 값 목록을 virtualhosts 진행합니다.
Dispatcher는 다음과 같은 방식으로 가장 일치하는 가상 호스트 값을 찾습니다.
  • 요청 세 개, host 즉, scheme uri 요청의 모든 항목과 일치하는 처음 접하는 가상 호스트가 사용됩니다.
  • 요청에 대해 virtualhosts scheme 요청의 값과 일치하는 uri 부분이 없는 scheme 경우 요청의 내용과 일치하는 첫 번째 발견된 가상 호스트가 uri host 사용됩니다.
  • 요청의 호스트와 일치하는 호스트 부분이 없는 virtualhosts 값은 최상위 팜의 최상위 가상 호스트가 사용됩니다.
따라서 기본 가상 호스트를 dispatcher.any 파일의 최상위 팜의 virtualhosts 속성 맨 위에 배치해야 합니다.

가상 호스트 해상도 예

다음 예제는 디스패처 팜 두 개를 정의하는 dispatcher.any 파일의 조각을 나타내며 각 팜은 virtualhosts 속성을 정의합니다.
/farms
  {
  /myProducts 
    { 
    /virtualhosts
      {
      "www.mycompany.com"
      }
    /renders
      {
      /hostname "server1.myCompany.com"
      /port "80"
      }
    }
  /myCompany 
    { 
    /virtualhosts
      {
      "www.mycompany.com/products/*"
      }
    /renders
      {
      /hostname "server2.myCompany.com"
      /port "80"
      }
    }
  }

이 예를 사용하는 다음 표는 지정된 HTTP 요청에 대해 해결된 가상 호스트를 보여줍니다.
요청 URL
해결된 가상 호스트
https://www.mycompany.com/products/gloves.html
www.mycompany.com/products/*
https://www.mycompany.com/about.html
www.mycompany.com

보안 세션 활성화 - /sessionmanagement

/allowAuthorized 이 기능을 활성화하려면 섹션에서 로 설정해야 "0" 합니다 /cache .
사용자가 팜의 모든 페이지에 액세스하기 위해 로그인해야 하도록 렌더링 팜에 액세스할 수 있는 보안 세션을 만듭니다. 로그인한 사용자는 팜의 페이지에 액세스할 수 있습니다. CUG 에서 이 기능을 사용하는 방법에 대한 자세한 내용은 닫힌 사용자 그룹 만들기를 참조하십시오. 또한 라이브하기 전에 Dispatcher 보안 검사 목록을 참조하십시오.
속성은 /sessionmanagement 의 하위 속성입니다 /farms .
웹 사이트의 섹션에서 서로 다른 액세스 요구 사항을 사용하는 경우 여러 팜을 정의해야 합니다.
/sessionmanagement 에는 다음과 같은 몇 가지 하위 매개 변수가 있습니다.
/directory (필수)
세션 정보를 저장하는 디렉토리입니다. 디렉토리가 없는 경우 해당 디렉토리가 생성됩니다.
디렉토리 하위 매개 변수를 구성할 때 루트 폴더( )를 가리키지 마십시오 /directory "/" . 이로 인해 심각한 문제가 발생할 수 있습니다. 세션 정보를 저장하는 폴더에 대한 경로를 항상 지정해야 합니다. 예:
/sessionmanagement 
  { 
  /directory "/usr/local/apache/.sessions"
  }

/encode (선택 사항)
세션 정보가 인코딩되는 방법입니다. md5 알고리즘을 사용한 암호화에 "md5"를 사용하고 16진수 인코딩에 "16진수"를 사용합니다. 세션 데이터를 암호화하면 파일 시스템에 액세스할 수 있는 사용자는 세션 내용을 읽을 수 없습니다. 기본값은 "md5"입니다.
/header (선택 사항)
인증 정보를 저장하는 HTTP 헤더 또는 쿠키의 이름입니다. http 헤더에 정보를 저장하는 경우 를 HTTP:<*header-name*> 사용합니다. 정보를 쿠키에 저장하려면 를 Cookie:<header-name> 사용합니다. 값을 지정하지 않으면 값이 HTTP:authorization 사용됩니다.
/timeout (선택 사항)
세션이 마지막으로 사용된 후 시간이 초과될 때까지 남은 시간(초)입니다. "800"을 지정하지 않은 경우 사용자의 마지막 요청 후 세션이 약 13분 이상 시간이 초과됩니다.
구성 예는 다음과 같습니다.
/sessionmanagement 
  { 
  /directory "/usr/local/apache/.sessions" 
  /encode "md5" 
  /header "HTTP:authorization" 
  /timeout "800" 
  }

페이지 렌더러 정의

/renders 속성은 Dispatcher가 문서를 렌더링하기 위해 요청을 보내는 URL을 정의합니다. 다음 예제 /renders 섹션에서는 렌더링할 단일 AEM 인스턴스를 식별합니다.
/renders
  {
    /myRenderer
      {
      # hostname or IP of the renderer
      /hostname "aem.myCompany.com"
      # port of the renderer
      /port "4503"
      # connection timeout in milliseconds, "0" (default) waits indefinitely
      /timeout "0"
      }
  }

다음 예제 /renders 섹션은 디스패처와 동일한 컴퓨터에서 실행되는 AEM 인스턴스를 식별합니다.
/renders
  {
    /myRenderer
     {
     /hostname "127.0.0.1"
     /port "4503"
     }
  }

다음 예제 /renders 섹션은 두 AEM 인스턴스 간에 동일하게 렌더링 요청을 배포합니다.
/renders
  {
    /myFirstRenderer
      {
      /hostname "aem.myCompany.com"
      /port "4503"
      }
    /mySecondRenderer
      {
      /hostname "127.0.0.1"
      /port "4503"
      }
  }

렌더링 옵션

/timeout
AEM 인스턴스에 액세스하는 연결 시간 초과를 밀리초 단위로 지정합니다. 기본값은 "0"으로, 디스패처가 무기한 대기합니다.
/receiveTimeout
응답이 허용된 시간(밀리초)을 지정합니다. 기본값은 "600000"으로, Dispatcher가 10분 동안 기다립니다. "0"을 설정하면 시간 초과가 완전히 제거됩니다. 응답 헤더를 구문 분석하는 동안 시간 제한에 도달하면 HTTP 상태 504(잘못된 게이트웨이)가 반환됩니다. 응답 본문을 읽는 동안 시간 제한에 도달하면 디스패처는 클라이언트에 불완전한 응답을 반환하지만 기록되었을 수 있는 캐시 파일을 삭제합니다.
/ipv4
Dispatcher가 getaddrinfo 함수(IPv6용)를 사용하여 렌더링의 IP 주소를 얻을지, 아니면 gethostbyname 함수(IPv4용)를 사용할지를 지정합니다. 값이 0이면 getaddrinfo 사용됩니다. 값이 1이면 gethostbyname 사용됩니다. 기본값은 0입니다.
getaddrinfo 함수는 IP 주소 목록을 반환합니다. Dispatcher는 TCP/IP 연결을 설정할 때까지 주소 목록을 반복합니다. 따라서, ipv4 속성은 렌더링 호스트 이름이 여러 IP 주소와 연결되어 있고, getaddrinfo 함수에 대한 응답으로 호스트가 항상 같은 순서로 IP 주소 목록을 반환하는 경우에 중요합니다. 이러한 경우 Dispatcher가 연결하는 IP 주소가 무작위 지정되도록 gethostbyname 함수를 사용해야 합니다.
Amazon Elastic Load Balancing(ELB)은 잠재적으로 동일한 순서로 IP 주소 목록이 있는 getaddrinfo에 응답하는 서비스입니다.
/secure
속성에 "1" 값이 /secure 있는 경우 디스패처는 HTTPS를 사용하여 AEM 인스턴스와 통신합니다. 자세한 내용은 Dispatcher가 SSL 을 사용하도록 구성을 참조하십시오 .
/always-resolve
Dispatcher 버전 4.1.6에서는 ​다음과 같이 /always-resolve 속성을 구성할 수 있습니다.
  • "1"으로 설정하면 모든 요청에서 호스트 이름을 확인합니다(디스패처는 IP 주소를 캐시하지 않음). 각 요청에 대한 호스트 정보를 얻는 데 필요한 추가 호출로 인해 약간의 성능 영향이 있을 수 있습니다.
  • 속성이 설정되지 않으면 IP 주소가 기본적으로 캐시됩니다.
또한 다음 샘플에서와 같이 동적 IP 해상도 문제가 발생하는 경우에도 이 속성을 사용할 수 있습니다.
/renders {
  /0001 {
     /hostname "host-name-here"
     /port "4502"
     /ipv4 "1"
     /always-resolve "1"
     }
  }

컨텐츠에 대한 액세스 구성

/filter 섹션을 사용하여 Dispatcher가 허용하는 HTTP 요청을 지정합니다. 다른 모든 요청은 404 오류 코드(페이지를 찾을 수 없음)와 함께 웹 서버로 다시 전송됩니다. 섹션이 없는 /filter 경우 모든 요청이 허용됩니다.
참고:상태 파일에 대한 요청은 항상 거부됩니다.
Dispatcher를 사용하여 액세스를 제한할 때의 추가 고려 사항은 Dispatcher 보안 검사 목록을 참조하십시오. 또한 AEM 설치에 대한 추가 보안 세부 사항은 AEM 보안 점검 목록을 참조하십시오.
/filter 섹션은 HTTP 요청의 요청 라인 부분의 패턴에 따라 컨텐츠를 거부하거나 액세스를 허용하는 일련의 규칙으로 구성됩니다. /filter 섹션에 필터 전략을 사용해야 합니다.
  • 먼저 모든 것에 대한 액세스를 거부합니다.
  • 필요에 따라 컨텐츠에 대한 액세스를 허용합니다.

필터 정의

섹션의 각 항목에는 /filter 요청 라인의 특정 요소 또는 전체 요청 라인과 일치하는 유형과 패턴이 포함되어 있습니다. 각 필터에는 다음 항목이 포함될 수 있습니다.
  • 유형 :패턴과 일치하는 요청에 대한 액세스를 허용할지 또는 거부할지를 /type 나타냅니다. 값은 allow 또는 deny 일 수 있습니다.
  • 요청 라인의 요소:HTTP 요청의 요청 라인 /method 부분의 이러한 특정 부분에 따라 요청을 필터링하기 위한 패턴, /url``/query``/protocol 또는 패턴을 포함합니다. 전체 요청 라인이 아닌 요청 라인의 요소에 대한 필터링은 기본 필터 방법입니다.
  • 요청 라인의 고급 요소:Dispatcher 4.2.0부터 4개의 새로운 필터 요소를 사용할 수 있습니다. 이러한 새로운 요소는 /path 각각 /selectors``/extension /suffix 입니다. URL 패턴을 추가로 제어하려면 이러한 항목 중 하나 이상을 포함합니다.
이러한 각 요소가 참조하는 요청 라인의 일부에 대한 자세한 내용은 Sling URL 분해 위키 페이지를 참조하십시오.
  • glob 속성 :이 /glob 속성은 HTTP 요청의 전체 요청 라인과 일치하는 데 사용됩니다.
Dispatcher에서 글로벌 필터링을 사용하지 않습니다. 따라서 보안 문제로 이어질 수 있으므로 /filter 섹션에서 글로브를 사용하지 않아야 합니다. 따라서,
/glob "* *.css *"
You should use
/url "*.css"

HTTP 요청의 요청 라인 부분

HTTP/1.1은 요청 라인을 다음과 같이 정의합니다.
메서드 요청-URI HTTP-Version <CRLF>
<CRLF> 문자는 캐리지 리턴 후 줄 피드를 나타냅니다. 다음은 클라이언트가 Geometrixx-Outers 사이트의 en 페이지를 요청할 때 수신되는 요청 라인입니다.
/content/geometrixx-outdoors/en.html HTTP.1.1 다운로드<CRLF>
패턴은 요청줄의 공백 문자와 <CRLF> 문자를 고려해야 합니다.

큰따옴표와 작은따옴표

필터 규칙을 만들 때는 간단한 패턴에 큰 따옴표를 "pattern" 사용합니다. Dispatcher 4.2.0 이상을 사용하고 패턴에 정규 표현식이 포함되어 있는 경우, regex 패턴을 작은 따옴표로 묶어야 합니다. '(pattern1|pattern2)'

Regular Expressions

Dispatcher 4.2.0 이후에는 필터 패턴에 POSIX 확장 정규 표현식을 포함할 수 있습니다.

필터 문제 해결

필터가 예상한 대로 트리거되지 않는 경우, 요청을 차단하고 있는 필터를 확인할 수 있도록 발송자에 대한 추적 로깅을 활성화합니다.

필터 예:모두 거부

다음 예제 필터 섹션은 Dispatcher가 모든 파일에 대한 요청을 거부하도록 합니다. 모든 파일에 대한 액세스를 거부한 다음 특정 영역에 대한 액세스를 허용해야 합니다.
  /0001  { /glob "*" /type "deny" }

명시적으로 거부된 영역에 대한 요청은 404 오류 코드(페이지를 찾을 수 없음)가 반환됩니다.

필터 예:특정 영역에 대한 액세스 거부

또한 필터를 사용하면 ASP 페이지 및 게시 인스턴스 내의 민감한 영역과 같은 다양한 요소에 대한 액세스를 거부할 수 있습니다. 다음 필터는 ASP 페이지에 대한 액세스를 거부합니다.
/0002  { /type "deny" /url "*.asp"  }

필터 예:POST 요청 활성화

다음 예제 필터를 사용하면 POST 메서드로 양식 데이터를 제출할 수 있습니다.
/filter {
    /0001  { /glob "*" /type "deny" }
    /0002 { /type "allow" /method "POST" /url "/content/[.]*.form.html" }
}

필터 예:워크플로우 콘솔에 대한 액세스 허용

다음 예는 워크플로우 콘솔에 대한 외부 액세스를 거부하는 데 사용되는 필터를 보여줍니다.
/filter {
    /0001  { /glob "*" /type "deny" }
    /0002  {  /type "allow"  /url "/libs/cq/workflow/content/console*"  }
}

게시 인스턴스가 웹 애플리케이션 컨텍스트(예: 게시)를 사용하는 경우 필터 정의에도 추가할 수 있습니다.
/0003   { /type "deny"  /url "/publish/libs/cq/workflow/content/console/archive*"  }

여전히 제한된 영역 내에서 단일 페이지에 액세스해야 하는 경우 해당 페이지에 대한 액세스를 허용할 수 있습니다. 예를 들어 워크플로우 콘솔 내의 보관 탭에 대한 액세스를 허용하려면 다음 섹션을 추가합니다.
/0004  { /type "allow"  /url "/libs/cq/workflow/content/console/archive*"   }

여러 필터 패턴이 요청에 적용되면 마지막으로 적용된 필터 패턴이 적용됩니다.

필터 예:정규 표현식 사용

이 필터는 단일 인용 부호 사이에 정의된 일반 표현식을 사용하여 비공개 컨텐츠 디렉토리의 확장을 활성화합니다.
/005  {  /type "allow" /extension '(css|gif|ico|js|png|swf|jpe?g)' }

필터 예:요청 URL의 추가 요소 필터링

다음은 경로, 선택기 및 확장명에 대한 필터를 사용하여 경로 및 하위 트리에서 /content 표시되는 컨텐츠를 차단하는 규칙 예입니다.
/006 {
        /type "deny"
        /path "/content/*"
        /selectors '(feed|rss|pages|languages|blueprint|infinity|tidy)'
        /extension '(json|xml|html)'
        }

예제 /filter 섹션

Dispatcher를 구성할 때는 외부 액세스를 최대한 제한해야 합니다. 다음 예에서는 외부 방문자에 대한 최소한의 액세스를 제공합니다.
  • /content
  • 디자인 및 클라이언트 라이브러리와 같은 기타 컨텐츠예를 들면 다음과 같습니다.
    • /etc/designs/default*
    • /etc/designs/mydesign*
필터를 만든 후 AEM 인스턴스가 안전한지 테스트 페이지 액세스를 참조하십시오.
dispatcher.any 파일의 다음 /filter 섹션은 Dispatcher 구성 파일의 기초로 사용할 수 있습니다.
이 예는 Dispatcher와 함께 제공되는 기본 구성 파일을 기반으로 하며 프로덕션 환경에서 사용하기 위한 예로서 제작되었습니다. # 접두사가 있는 항목은 비활성화됨(주석 처리됨), 보안에 영향을 줄 수 있으므로 이러한 항목을 활성화하려는 경우(해당 행에서 # 제거) 주의해야 합니다.
모든 항목에 대한 액세스를 거부한 다음 특정(제한된) 요소에 대한 액세스를 허용해야 합니다.
  /filter
      {
      # Deny everything first and then allow specific entries
      /0001 { /type "deny" /glob "*" }
      
      # Open consoles
#     /0011 { /type "allow" /url "/admin/*"  }  # allow servlet engine admin
#     /0012 { /type "allow" /url "/crx/*"    }  # allow content repository
#     /0013 { /type "allow" /url "/system/*" }  # allow OSGi console
        
      # Allow non-public content directories
#     /0021 { /type "allow" /url "/apps/*"   }  # allow apps access
#     /0022 { /type "allow" /url "/bin/*"    }
      /0023 { /type "allow" /url "/content*" }  # disable this rule to allow mapped content only
      
#     /0024 { /type "allow" /url "/libs/*"   }
#     /0025 { /type "deny"  /url "/libs/shindig/proxy*" } # if you enable /libs close access to proxy

#     /0026 { /type "allow" /url "/home/*"   }
#     /0027 { /type "allow" /url "/tmp/*"    }
#     /0028 { /type "allow" /url "/var/*"    }

      # Enable extensions in non-public content directories, using a regular expression
      /0041
        {
        /type "allow"
        /extension '(css|gif|ico|js|png|swf|jpe?g)'
        }

      # Enable features 
      /0062 { /type "allow" /url "/libs/cq/personalization/*"  }  # enable personalization

      # Deny content grabbing, on all accessible pages, using regular expressions
      /0081
        {
        /type "deny"
        /selectors '((sys|doc)view|query|[0-9-]+)'
        /extension '(json|xml)'
        }
      # Deny content grabbing for /content and its subtree
      /0082
        {
        /type "deny"
        /path "/content/*"
        /selectors '(feed|rss|pages|languages|blueprint|infinity|tidy)'
        /extension '(json|xml|html)'
        }

#     /0087 { /type "allow" /method "GET" /extension 'json' "*.1.json" }  # allow one-level json requests
}

Apache와 함께 사용할 경우 Dispatcher 모듈의 DispatcherUseProcessedURL 속성에 따라 필터 URL 패턴을 디자인합니다. (Apache Web Server - Dispatcher용 Apache Web Server 구성을 참조하십시오 .)
다이내믹 미디어와 관련된 필터 0030 및 0031은 AEM 6.0 이상에 적용됩니다.
액세스 권한을 확장하도록 선택하는 경우 다음 권장 사항을 고려하십시오.
  • CQ 버전 5.4 또는 이전 버전을 사용하는 경우 외부 액세스를 항상 /admin 완전히 ** 비활성화해야 합니다.
  • 파일에 대한 액세스를 허용할 때에는 주의해야 합니다 /libs . 액세스 권한은 개별적으로 허용되어야 합니다.
  • 복제 구성을 볼 수 없도록 액세스 거부:
    • /etc/replication.xml*
    • /etc/replication.infinity.json*
  • Google 가젯 역방향 프록시 액세스 거부:
    • /libs/opensocial/proxy*
설치 내용에 따라 사용 가능한 추가 리소스가 /libs 있거나 /apps 기타 다른 곳에 있을 수 있습니다. 외부에서 액세스되는 리소스를 확인하는 방법 중 하나로 access.log 파일을 사용할 수 있습니다.
콘솔 및 디렉토리 액세스는 프로덕션 환경에 대한 보안 위험을 초래할 수 있습니다. 명시적 정당성이 없는 경우 비활성화된 상태로 두어야 합니다(주석 처리됨).
게시 환경에서 보고서를 /etc/reports 사용하는 경우 Dispatcher가 외부 방문자에 대한 액세스를 거부하도록 구성해야 합니다.

쿼리 문자열 제한

Dispatcher 버전 4.1.5부터는 /filter 섹션을 사용하여 쿼리 문자열을 제한합니다. 쿼리 문자열을 명시적으로 허용하고 allow 필터 요소를 통해 일반 허용을 제외하는 것이 좋습니다.
단일 항목에는 glob 또는 일부 메서드 , url , query , ** queryConstructionVersion은 모두 사용할 수 있지만 그렇지 않습니다. 다음 예제에서는 a=* 쿼리 문자열을 허용하고 /etc 노드를 확인하는 URL에 대한 다른 모든 쿼리 문자열을 거부합니다.
/filter {
 /0001 { /type "deny" /method "POST" /url "/etc/*" }
 /0002 { /type "allow" /method "GET" /url "/etc/*" /query "a=*" }
}

규칙에 /query a가 있으면 쿼리 문자열이 포함된 요청만 일치하고 제공된 쿼리 패턴과 일치하게 됩니다.
위의 예에서 쿼리 문자열이 /etc 없는 요청에 대한 요청도 함께 허용해야 하는 경우 다음 규칙이 필요합니다.
/filter {  
>/0001 { /type "deny" /method “*" /url "/path/*" }  
>/0002 { /type "allow" /method "GET" /url "/path/*" }  
>/0003 { /type “deny" /method "GET" /url "/path/*" /query "*" }  
>/0004 { /type "allow" /method "GET" /url "/path/*" /query "a=*" }  
}  

Dispatcher 보안 테스트

발송자 필터는 AEM 게시 인스턴스의 다음 페이지 및 스크립트에 대한 액세스를 차단해야 합니다. 웹 브라우저를 사용하여 다음 페이지를 사이트 방문자로 열려고 시도하고 코드 404가 반환되는지 확인합니다. 다른 결과가 있으면 필터를 조정합니다.
/content/add_valid_page.html?debug=layout에 대한 일반 페이지 렌더링이 표시됩니다.
  • /admin
  • /system/console
  • /dav/crx.default
  • /crx
  • /bin/crxde/logs
  • /jcr:system/jcr:versionStorage.json
  • /_jcr_system/_jcr_versionStorage.json
  • /libs/wcm/core/content/siteadmin.html
  • /libs/collab/core/content/admin.html
  • /libs/cq/ui/content/dumplibs.html
  • /var/linkchecker.html
  • /etc/linkchecker.html
  • /home/users/a/admin/profile.json
  • /home/users/a/admin/profile.xml
  • /libs/cq/core/content/login.json
  • ../libs/foundation/components/text/text.jsp
  • /컨텐츠/.{.}/libs/foundation/components/text/text.jsp
  • /apps/sling/config/org.apache.felix.webconsole.internal.servlet.OsgiManager.config/jcr%3acontent/jcr%3adata
  • /libs/foundation/components/primary/cq/workflow/components/participants/json.GET.servlet
  • /content.pages.json
  • /content.languages.json
  • /content.blueprint.json
  • /컨텐츠.-1.json
  • /content.10.json
  • /content.infinity.json
  • /content.tidy.json
  • /content.tidy.-1.blubber.json
  • /content/dam.tidy.-100.json
  • /content/content/geometrixx.sitemap.txt
  • /content/add_valid_page.query.json?statement=//*
  • /content/add_valid_page.qu%65ry.js%6Fn?statement=//*
  • /content/add_valid_page.query.json?statement=//* #/(@transportPassword%20|%20@transportUri%20|%20@transportUser)
  • /content/add_valid_path_to_a_page/_jcr_content.json
  • /content/add_valid_path_to_a_page/jcr:content.json
  • /content/add_valid_path_to_a_page/_jcr_content.feed
  • /content/add_valid_path_to_a_page/jcr:content.feed
  • /content/add_valid_path_to_a_page/pagename._jcr_content.feed
  • /content/add_valid_path_to_a_page/pagename.jcr:content.feed
  • /content/add_valid_path_to_a_page/pagename.docview.xml
  • /content/add_valid_path_to_a_page/pagename.docview.json
  • /content/add_valid_path_to_a_page/pagename.sysview.xml
  • /etc.xml
  • /content.feed.xml
  • /content.rss.xml
  • /content.feed
  • /content/add_valid_page.html?debug=layout
  • /projects
  • /tagging
  • /etc/replication.html
  • /etc/cloudservices.html
  • /시작
터미널이나 명령 프롬프트에 다음 명령을 실행하여 익명 쓰기 액세스가 활성화되었는지 확인합니다. 노드에 데이터를 쓸 수 없습니다.
curl -X POST "https://anonymous:anonymous@hostname:port/content/usergenerated/mytestnode"
Dispatcher 캐시를 무효화하고 코드 404 응답을 수신하도록 하려면 터미널 또는 명령 프롬프트에서 다음 명령을 실행합니다.
curl -H "CQ-Handle: /content" -H "CQ-Path: /content" https://yourhostname/dispatcher/invalidate.cache

별칭 URL에 액세스 활성화

CQ 또는 AEM 페이지에 대해 구성된 별칭 URL에 액세스할 수 있도록 Dispatcher를 구성합니다.
별칭 URL에 대한 액세스가 활성화되면 Dispatcher는 렌더링 인스턴스에서 실행되는 서비스를 정기적으로 호출하여 별칭 URL 목록을 가져옵니다. Dispatcher는 이 목록을 로컬 파일에 저장합니다. 섹션의 필터로 인해 페이지 요청이 거부되면 Dispatcher는 /filter 별칭 URL 목록을 참조합니다. 거부된 URL이 목록에 있으면 Dispatcher에서 별칭 URL에 액세스할 수 있습니다.
별칭 URL에 액세스할 수 있도록 하려면 다음 예와 유사한 /vanity_urls 섹션을 /farms 섹션에 추가합니다.
 /vanity_urls {
      /url "/libs/granite/dispatcher/content/vanityUrls.html"
      /file "/tmp/vanity_urls"
      /delay 300
 }

/vanity_urls 섹션에는 다음 속성이 포함되어 있습니다.
  • /url :렌더링 인스턴스에서 실행되는 별칭 URL 서비스의 경로입니다. 이 속성의 값은 "/libs/granite/dispatcher/content/vanityUrls.html" 다음과 같아야 합니다.
  • /file :Dispatcher가 별칭 URL 목록을 저장하는 로컬 파일의 경로입니다. Dispatcher가 이 파일에 대한 쓰기 액세스 권한을 가지고 있는지 확인하십시오.
  • /delay :(초) 별칭 URL 서비스에 대한 호출 사이의 시간입니다.
렌더링이 AEM의 인스턴스인 경우 별칭 URL 서비스를 설치하려면 VanityURLS -Components 패키지를 설치해야 합니다. 패키지 공유에 로그인을 참조하십시오 .
다음 절차를 사용하여 별칭 URL에 대한 액세스를 활성화합니다.
  1. 렌더링 서비스가 AEM 인스턴스인 경우 게시 인스턴스에 com.adobe.granite.dispatcher.vanityurl.content 패키지를 설치합니다(위 참고 참조).
  2. AEM 또는 CQ 페이지에 대해 구성한 각 별칭 URL에 대해 구성이 URL을 거부하는지 [/filter](dispatcher-configuration.md#main-pars_134_32_0009) 확인합니다. 필요한 경우 URL을 거부하는 필터를 추가합니다.
  3. 아래 /vanity_urls 섹션을 /farms 추가하십시오.
  4. Apache 웹 서버를 다시 시작합니다.

신디케이션 요청 전달 - /propagementSyncPost

신디케이션 요청은 일반적으로 디스패처용이므로 기본적으로 렌더러(예: AEM 인스턴스)로 전송되지 않습니다.
필요한 경우 /propagateSyncPost 속성을 "1"로 설정하여 신디케이션 요청을 Dispatcher로 전달합니다. 설정된 경우 필터 섹션에서 POST 요청이 거부되지 않도록 해야 합니다.

발송자 캐시 구성 - /cache

/cache 섹션은 Dispatcher가 문서를 캐시하는 방식을 제어합니다. 여러 하위 속성을 구성하여 캐싱 전략을 구현합니다.
  • /docroot
  • /statfile
  • /serveStaleOnError
  • /allowAuthorized
  • /규칙
  • /statfileslevel
  • /invalidate
  • /invalidateHandler
  • /allowedClients
  • /ignoreUrlParams
  • /headers
  • /mode
  • /gracePeriod
  • /enableTTL
예제 캐시 섹션은 다음과 같습니다.
/cache
  {
  /docroot "/opt/dispatcher/cache"
  /statfile  "/tmp/dispatcher-website.stat"          
  /allowAuthorized "0"
      
  /rules
    {
    # List of files that are cached
    }

  /invalidate
    {
    # List of files that are auto-invalidated
    }
  }
  

권한 구분 캐싱의 경우 보안 컨텐츠 캐싱을 참조하십시오 .

캐시 디렉토리 지정

/docroot 속성은 캐시된 파일이 저장되는 디렉토리를 식별합니다.
이 값은 Dispatcher와 웹 서버가 동일한 파일을 처리하도록 웹 서버의 문서 루트와 정확히 동일한 경로여야 합니다. 웹 서버는 디스패처 캐시 파일을 사용할 때 올바른 상태 코드를 전달해야 하므로 이를 찾을 수도 있습니다.
여러 팜을 사용하는 경우 각 팜은 다른 문서 루트를 사용해야 합니다.

상태 파일 이름 지정

/statfile 속성은 상태 파일로 사용할 파일을 식별합니다. Dispatcher는 이 파일을 사용하여 최신 컨텐츠 업데이트 시간을 등록합니다. 상태 파일은 웹 서버의 모든 파일이 될 수 있습니다.
상태 파일에 내용이 없습니다. 컨텐츠가 업데이트되면 Dispatcher가 타임스탬프를 업데이트합니다. 기본 상태 파일의 이름은 .stat이며 dokroot에 저장됩니다. 디스패처는 상태 파일에 대한 액세스를 차단합니다.
/statfileslevel 구성되면 Dispatcher는 /statfile 속성을 무시하고 .stat를 이름으로 사용합니다.

오류가 발생할 때 부실 문서 제공

/serveStaleOnError 속성은 렌더링 서버에서 오류를 반환할 때 Dispatcher가 무효화된 문서를 반환할지 여부를 제어합니다. 기본적으로 상태 파일을 터치하고 캐시된 컨텐츠를 무효화하면 Dispatcher는 다음에 요청할 때 캐시된 컨텐츠를 삭제합니다.
/serveStaleOnError 가 "1"로 설정된 경우, 렌더링 서버가 성공적인 응답을 반환하지 않는 한 Dispatcher는 무효화된 컨텐츠를 캐시에서 삭제하지 않습니다. AEM의 5xx 응답이나 연결 시간 초과로 인해 Dispatcher가 오래된 컨텐츠를 제공하고 HTTP 상태(재유효성 검사 실패)를 사용하여 응답합니다.

인증이 사용될 때 캐싱

/allowAuthorized 속성은 다음 인증 정보를 포함하는 요청이 캐시되는지 여부를 제어합니다.
  • The authorization header.
  • 이름이 authorization 있는 쿠키입니다.
  • 이름이 login-token 있는 쿠키입니다.
기본적으로 이 인증 정보를 포함하는 요청은 캐시된 문서가 클라이언트에 반환될 때 인증이 수행되지 않으므로 캐시되지 않습니다. 이 구성은 Dispatcher가 필요한 권한이 없는 사용자에게 캐시된 문서를 제공하지 못하게 합니다.
그러나 요구 사항에 의해 인증된 문서의 캐싱이 허용되면 /allowAuthorized를 다음 중 하나로 설정합니다.
/allowAuthorized "1"
속성을 사용하여 세션 관리를 활성화하려면 /sessionmanagement 속성을 로 설정해야 합니다 /allowAuthorized "0" .

캐시에 문서 지정

/rules 속성은 문서 경로에 따라 캐시되는 문서를 제어합니다. /rules 속성에 관계없이 Dispatcher는 다음 상황에서 문서를 캐시하지 않습니다.
  • 요청 URI에 물음표("?")가 포함된 경우. 일반적으로 이것은 캐시할 필요가 없는 검색 결과와 같은 동적 페이지를 나타냅니다.
  • 파일 확장명이 없습니다. 웹 서버에는 문서 유형(MIME 유형)을 결정하기 위한 확장명이 필요합니다.
  • 인증 헤더가 설정됨(구성할 수 있음)
  • AEM 인스턴스가 다음 헤더로 응답하는 경우:
    • no-cache
    • no-store
    • must-revalidate
GET 또는 HEAD(HTTP 헤더의 경우) 메서드는 Dispatcher에서 캐시할 수 있습니다. 응답 헤더 캐싱에 대한 자세한 내용은 HTTP 응답 헤더 캐싱 섹션을 참조하십시오 .
/rules 속성의 각 항목에는 글로벌 패턴과 유형이 포함되어 있습니다.
  • 문서의 경로와 일치하는 글로벌 패턴을 사용합니다.
  • 유형은 글로벌 패턴과 일치하는 문서를 캐시할지 여부를 나타냅니다. 이 값은 허용(문서 캐시) 또는 거부(문서를 항상 렌더링하기 위해)일 수 있습니다.
동적 페이지가 없는 경우(위의 규칙에서 이미 제외된 페이지 제외) Dispatcher가 모든 것을 캐시하도록 구성할 수 있습니다. 이에 대한 규칙 섹션은 다음과 같습니다.
/rules
  { 
    /0000  {  /glob "*"   /type "allow" }
  }

전역 속성에 대한 자세한 내용은 전역 속성에 대한 패턴 디자인을 참조하십시오 .
동적(예: 뉴스 애플리케이션) 또는 닫힌 사용자 그룹 내에 페이지의 일부 섹션이 있는 경우 예외를 정의할 수 있습니다.
캐시된 페이지에 대한 사용자 권한이 확인되지 않으므로 닫힌 사용자 그룹을 캐시하지 않아야 합니다.
/rules
  {
   /0000  { /glob "*" /type "allow" }
   /0001  { /glob "/en/news/*" /type "deny" }
   /0002  { /glob "*/private/*" /type "deny"  }   
  }

압축
Apache 웹 서버에서는 캐시된 문서를 압축할 수 있습니다. 압축으로 인해 Apache는 클라이언트에서 요청한 경우 문서를 압축된 형식으로 반환할 수 있습니다. 압축은 Apache 모듈을 활성화하여 자동으로 수행됩니다. mod_deflate 예:
AddOutputFilterByType DEFLATE text/plain

모듈은 Apache 2.x와 함께 기본적으로 설치됩니다.

폴더 수준별 파일 무효화

/statfileslevel 속성을 사용하여 경로에 따라 캐시된 파일을 무효화합니다.
  • Dispatcher는 문서 루트 폴더에서 지정한 수준으로 각 폴더에 .stat 파일을 만듭니다. docroot 폴더는 수준 0입니다.
  • 파일을 터치하면 파일이 .stat 무효화됩니다. 파일의 마지막 수정 날짜는 캐시된 문서의 마지막 수정 날짜와 비교됩니다. .stat 파일이 최신 버전이면 문서를 다시 .stat 가져옵니다.
  • 특정 수준에 있는 파일이 무효화되면 무효화된 파일 또는 구성된 파일(둘 중 더 작은 파일) .stat 모든 파일이 statsfilevel 수정됩니다.
    • 예:속성을 6으로 statfileslevel 설정하면 파일이 레벨 5에서 무효화되면 docroot에서 5로 모든 .stat 파일이 수정됩니다. 이 예제를 계속 진행하면 파일이 레벨 7에서 무효화되는 경우 에 해당합니다. stat docroot에서 6까지 파일이 수정됩니다( /statfileslevel = "6" ).
무효화된 파일에 대한 경로를 따른 리소스만 영향을 받습니다. 다음 예를 고려하십시오.웹 사이트에서는 구조를 사용합니다. /content/myWebsite/xx/. 3으로 설정하면 statfileslevel .stat 파일이 다음과 같이 생성됩니다.
  • docroot
  • /content
  • /content/myWebsite
  • /content/myWebsite/*xx*
의 파일이 /content/myWebsite/xx 무효화되면 doroot에서 .stat to까지의 모든 파일이 /content/myWebsite/xx 수정됩니다. 이것은 예와 같은 /content/myWebsite/xx 경우나 /content/myWebsite/yy 같은 경우는 /content/anotherWebSite 아닙니다.
추가 헤더를 전송하여 무효화를 방지할 수 CQ-Action-Scope:ResourceOnly 있습니다. 이 기능은 캐시의 다른 부분을 무효화하지 않고 특정 리소스를 플러시하는 데 사용할 수 있습니다. 자세한 내용은 이 페이지 수동으로 발송자 캐시 무효화를 참조하십시오.
속성 값을 지정하면 /statfileslevel 속성이 /statfile 무시됩니다.

캐시된 파일 자동 무효화

/invalidate 속성은 컨텐츠를 업데이트할 때 자동으로 무효화되는 문서를 정의합니다.
자동 무효화를 통해 디스패처는 컨텐츠 업데이트 후 캐시된 파일을 삭제하지 않고 다음에 요청할 때 해당 파일의 유효성을 확인합니다. 자동 무효화되지 않은 캐시에 있는 문서는 컨텐츠 업데이트로 명시적으로 삭제될 때까지 캐시에 유지됩니다.
자동 무효화는 일반적으로 HTML 페이지에 사용됩니다. HTML 페이지에는 종종 다른 페이지에 대한 링크가 포함되어 있으므로 컨텐츠 업데이트가 페이지에 영향을 주는지 여부를 판단하기가 어렵습니다. 컨텐츠가 업데이트될 때 관련 페이지가 모두 무효화되도록 하려면 모든 HTML 페이지를 자동으로 무효화합니다. 다음 구성은 모든 HTML 페이지를 무효화합니다.
  /invalidate
  {
   /0000  { /glob "*" /type "deny" }
   /0001  { /glob "*.html" /type "allow" }
  }

전역 속성에 대한 자세한 내용은 전역 속성에 대한 패턴 디자인을 참조하십시오 .
이 구성으로 인해 /content/geometrixx/en이 활성화되면 다음 작업이 발생합니다.
  • 패턴 엔이 있는 모든 파일*가 /content/geometrixx/ 폴더에서 제거됩니다.
  • /content/geometrixx/en/_jcr_content 폴더가 제거됩니다.
  • /invalidate 구성과 일치하는 다른 모든 파일은 즉시 삭제되지 않습니다. 이러한 파일은 다음 요청이 발생하면 삭제됩니다. /content/geometrixx.html이 삭제되지 않은 경우 /content/geometrixx.html이 요청되면 삭제됩니다.
다운로드용으로 자동으로 생성된 PDF 및 ZIP 파일을 제공하는 경우 이러한 파일도 자동으로 무효화해야 할 수 있습니다. 구성 예는 다음과 같습니다.
/invalidate
  {
   /0000 { /glob "*" /type "deny" }
   /0001 { /glob "*.html" /type "allow" }
   /0002 { /glob "*.zip" /type "allow" }
   /0003 { /glob "*.pdf" /type "allow" }
  }

Adobe Analytics와 AEM 통합은 웹 사이트의 analytics.sitecatalyst.js 파일에서 구성 데이터를 제공합니다. Dispatcher와 함께 제공되는 예제 dispatcher.any 파일에는 이 파일에 대한 다음 무효화 규칙이 포함되어 있습니다.
{
   /glob "*/analytics.sitecatalyst.js"  /type "allow"
}

사용자 정의 무효화 스크립트 사용

/invalidateHandler 속성을 사용하면 Dispatcher가 수신한 각 무효화 요청에 대해 호출되는 스크립트를 정의할 수 있습니다.
다음 인수를 사용하여 호출됩니다.
다른 애플리케이션별 캐시를 무효화하는 등 다양한 사용 사례를 다루거나, 페이지의 외부화된 URL과 문서 루트의 위치가 컨텐츠 경로와 일치하지 않는 경우를 처리하는 데 사용할 수 있습니다.
아래 예제는 각 무효화 요청을 파일에 기록합니다.
/invalidateHandler "/opt/dispatcher/scripts/invalidate.sh"

샘플 무효화 처리기 스크립트

#!/bin/bash

printf "%-15s: %s %s" $1 $2 $3>> /opt/dispatcher/logs/invalidate.log

캐시를 플러시할 수 있는 클라이언트 제한

/allowedClients 속성은 캐시를 플러시할 수 있는 특정 클라이언트를 정의합니다. 글로빙 패턴은 IP와 일치합니다.
다음 예:
  1. 모든 클라이언트에 대한 액세스 거부
  2. 명시적으로 localhost에 대한 액세스 허용
/allowedClients
  {
   /0001 { /glob "*.*.*.*"  /type "deny" }
   /0002 { /glob "127.0.0.1" /type "allow" }
  }

전역 속성에 대한 자세한 내용은 전역 속성에 대한 패턴 디자인을 참조하십시오 .
/allowedClients를 정의하는 것이 좋습니다.
이렇게 하지 않으면 어떤 클라이언트도 캐시를 지우는 호출을 발행할 수 있습니다.이 작업을 반복해서 수행하면 사이트 성능에 심각한 영향을 줄 수 있습니다.

URL 매개 변수 무시

ignoreUrlParams 섹션에서는 페이지가 캐시되는지 아니면 캐시에서 배달되는지를 결정할 때 무시되는 URL 매개 변수를 정의합니다.
  • 요청 URL에 모두 무시된 매개 변수가 포함되어 있으면 페이지가 캐시됩니다.
  • 요청 URL에 무시되지 않은 매개 변수가 하나 이상 포함되어 있으면 페이지가 캐시되지 않습니다.
페이지에 대한 매개 변수가 무시되면 페이지가 처음으로 요청될 때 페이지가 캐시됩니다. 페이지의 후속 요청은 요청에 있는 매개 변수의 값에 관계없이 캐시된 페이지에서 제공됩니다.
무시되는 매개 변수를 지정하려면 ignoreUrlParams 속성에 글로벌 규칙을 추가합니다.
  • 매개 변수를 무시하려면 매개 변수를 허용하는 global 속성을 만듭니다.
  • 페이지가 캐시되지 않도록 하려면 매개 변수를 거부하는 글로벌 속성을 만듭니다.
다음 예제에서는 Dispatcher가 "q" 매개 변수를 무시하여 q 매개 변수를 포함하는 요청 URL이 캐시되도록 합니다.
/ignoreUrlParams
{
    /0001 { /glob "*" /type "deny" }
    /0002 { /glob "q" /type "allow" }
}

다음 HTTP ignoreUrlParams 요청을 사용하면 q 매개 변수가 무시되므로 페이지가 캐시됩니다.
GET /mypage.html?q=5

다음 HTTP ignoreUrlParams 요청을 사용하면 매개 변수가 무시되지 않으므로 페이지가 캐시되지 않습니다 p .
GET /mypage.html?q=5&p=4

전역 속성에 대한 자세한 내용은 전역 속성에 대한 패턴 디자인을 참조하십시오 .

HTTP 응답 헤더 캐싱

이 기능은 Dispatcher 버전 4.1.11에서 사용할 수 있습니다.
/headers 속성을 사용하면 Dispatcher에서 캐시할 HTTP 헤더 유형을 정의할 수 있습니다. 캐시되지 않은 리소스에 대한 첫 번째 요청에서 구성된 값 중 하나와 일치하는 모든 헤더는 캐시 파일 옆에 있는 별도의 파일에 저장됩니다. 캐시된 리소스에 대한 후속 요청에서 저장된 헤더가 응답에 추가됩니다.
다음은 기본 구성의 예입니다.
/cache {
  ...
  /headers {
    "Cache-Control"
    "Content-Disposition"
    "Content-Type"
    "Expires"
    "Last-Modified"
    "X-Content-Type-Options"
    "Last-Modified"
  }
}

또한 파일 글로벌 문자는 허용되지 않습니다. 자세한 내용은 전역 속성에 대한 패턴 디자인을 참조하십시오 .
AEM에서 ETag 응답 헤더를 저장하고 전달하려면 Dispatcher가 필요합니다. 다음을 수행합니다.
FileETag none

발송자 캐시 파일 권한

mode 속성은 캐시에 있는 새 디렉토리 및 파일에 적용할 파일 권한을 지정합니다. 이 설정은 호출 프로세스의 umask 일부로 제한됩니다. 다음 값 중 하나 이상을 합하여 생성된 합수입니다.
  • 0400 소유자가 읽을 수 있도록 허용
  • 0200 소유자별 쓰기 허용
  • 0100 소유자가 디렉토리에서 검색할 수 있도록 허용
  • 0040 그룹 구성원이 읽을 수 있도록 허용합니다.
  • 0020 그룹 구성원에 의한 쓰기 허용
  • 0010 그룹 구성원이 디렉터리에서 검색할 수 있도록 허용
  • 0004 다른 사람이 읽도록 허용
  • 0002 다른 사람의 쓰기를 허용합니다.
  • 0001 다른 사람이 디렉터리에서 검색할 수 있도록 허용
기본값은 0755이며, 이 값을 통해 소유자는 읽기, 쓰기 또는 검색과 그룹 및 다른 사용자가 읽거나 검색할 수 있습니다.

조절 .stat 파일 수정

기본 /invalidate 속성을 사용하는 모든 활성화는 모든 .html 파일을 효과적으로 무효화합니다(경로가 /invalidate 섹션과 일치하는 경우). 트래픽이 많은 웹 사이트에서 후속 활동을 여러 번 수행하면 백엔드의 CPU 로드가 증가합니다. 이러한 경우 웹 사이트의 응답 속도를 유지하기 위해 "스로틀" .stat 파일을 수정하는 것이 좋습니다. 이 작업은 /gracePeriod 속성을 사용하여 수행할 수 있습니다.
/gracePeriod 속성은 지난 번 활성화 이후 캐시에서 부실 자동 무효화된 리소스가 계속 제공될 수 있는 시간(초)을 정의합니다. 이 속성은 일련의 활동이 전체 캐시를 반복적으로 무효화하는 설정에서 사용할 수 있습니다. 권장 값은 2초입니다.
자세한 내용은 위의 /invalidate /statfileslevel 섹션을 참조하십시오.

시간 기반 캐시 무효화 구성 - /enableTTL

/enableTTL 속성을 설정하면 백엔드 응답 헤더를 평가하고, 응답 헤더가 Cache-Control 최대 기간 또는 Expires 날짜를 포함하는 경우, 수정 시간과 만료 날짜가 동일한 상태로 캐시 파일 옆에 빈 보조 파일이 만들어집니다. 캐시된 파일이 수정 시간 이후에 요청되면 백 엔드에서 자동으로 다시 요청됩니다.
이 기능은 Dispatcher의 버전 4.1.11 이상에서 사용할 수 있습니다.

로드 밸런싱 구성 - /statistics

/statistics 섹션에서는 Dispatcher가 각 렌더링의 응답성을 평가하는 파일 범주를 정의합니다. 디스패처는 점수를 사용하여 요청을 보낼 렌더링을 결정합니다.
만드는 각 카테고리는 글로벌 패턴을 정의합니다. Dispatcher는 요청된 컨텐츠의 URI를 이러한 패턴과 비교하여 요청된 컨텐츠의 범주를 확인합니다.
  • 카테고리의 순서는 URI와 비교할 순서를 결정합니다.
  • URI와 일치하는 첫 번째 카테고리 패턴은 파일의 카테고리입니다. 더 이상 카테고리 패턴이 평가되지 않습니다.
Dispatcher는 최대 8개의 통계 카테고리를 지원합니다. 8개 이상의 카테고리를 정의하는 경우 처음 8개만 사용됩니다.
선택 항목 렌더링
Dispatcher가 렌더링된 페이지를 필요로 할 때마다 다음 알고리즘을 사용하여 렌더링을 선택합니다.
  1. 요청에 renderid 쿠키에 렌더링 이름이 포함된 경우 Dispatcher는 해당 렌더링을 사용합니다.
  2. 요청에 쿠키가 없는 경우 Dispatcher는 렌더링 통계를 비교합니다. renderid
    1. 디스패처는 요청 URI의 범주를 결정합니다.
    2. Dispatcher는 해당 범주에 대한 응답 점수가 가장 낮은 렌더링을 결정하고 해당 렌더링을 선택합니다.
  3. 렌더링을 아직 선택하지 않은 경우 목록에서 첫 번째 렌더링을 사용합니다.
렌더링 범주에 대한 점수는 이전 응답 시간과 Dispatcher가 시도한 이전 실패 및 성공한 연결을 기반으로 합니다. 각 시도에 대해 요청된 URI 범주에 대한 점수가 업데이트됩니다.
로드 밸런싱을 사용하지 않는 경우 이 섹션을 생략할 수 있습니다.

통계 범주 정의

렌더 선택을 위한 통계를 유지할 각 유형의 문서에 대한 범주를 정의합니다. /statistics 섹션에는 /categories 섹션이 포함됩니다. 카테고리를 정의하려면 다음 형식을 갖는 /categories 섹션 아래에 행을 추가하십시오.
/name { /glob "pattern"}
카테고리는 팜에 대해 고유해야 name 합니다. 자세한 pattern 내용은 전역 속성에 대한 패턴 디자인 섹션에서 설명합니다 .
URI의 카테고리를 결정하기 위해 Dispatcher는 일치 항목을 찾을 때까지 URI를 각 카테고리 패턴과 비교합니다. Dispatcher는 목록의 첫 번째 범주에서 시작하여 순서대로 진행합니다. 따라서 보다 구체적인 패턴으로 카테고리를 먼저 배치하십시오.
예를 들어 Dispatcher의 기본 dispatcher.any 파일은 HTML 카테고리와 다른 카테고리를 정의합니다. HTML 카테고리가 더 구체적이므로 먼저 표시됩니다.
/statistics
  {
  /categories
    {
      /html { /glob "*.html" }
      /others  { /glob "*" }
    }
  }

다음 예에는 검색 페이지에 대한 카테고리도 포함되어 있습니다.
/statistics
  {
  /categories
    {
      /search { /glob "*search.html" }
      /html { /glob "*.html" }
      /others  { /glob "*" }
    }
  }

Dispatcher 통계에서 서버 비가용성 반영

/unavailablePenalty 속성은 렌더링에 연결할 수 없을 때 렌더링 통계에 적용되는 시간(10분의 1 초)을 설정합니다. 디스패처는 요청된 URI와 일치하는 통계 범주에 시간을 추가합니다.
예를 들어, AEM이 실행 중이거나 수신이 아닌 경우 또는 네트워크 관련 문제로 인해 지정된 호스트 이름/포트에 대한 TCP/IP 연결을 설정할 수 없을 때 페널티가 적용됩니다.
/unavailablePenalty 속성은 /farm 섹션의 직접 하위 항목입니다( /statistics 섹션의 형제).
속성이 없는 /unavailablePenalty 경우 "1" 값이 사용됩니다.
/unavailablePenalty "1"

고정 연결 폴더 확인 - /stickyConnectionsFor

/stickyConnectionsFor 속성은 고정 문서를 포함하는 하나의 폴더를 정의합니다.URL을 사용하여 액세스합니다. Dispatcher는 이 폴더에 있는 모든 요청을 동일한 렌더링 인스턴스로 보냅니다. 일관된 연결을 통해 모든 문서에서 세션 데이터가 유지되고 일관됩니다. 이 메커니즘은 renderid 쿠키를 사용합니다.
다음 예제에서는 /products 폴더에 대한 고정 연결을 정의합니다.
/stickyConnectionsFor "/products"

페이지가 여러 컨텐츠 노드의 컨텐츠로 구성된 경우 컨텐츠 경로를 나열하는 /paths 속성을 포함합니다. 예를 들어, 페이지에 /content/image , /content/video /var/files/pdfs 의 컨텐츠가 포함되어 있습니다. 다음 구성은 페이지의 모든 컨텐츠에 대해 고정 연결을 활성화합니다.
/stickyConnections {
  /paths {
    "/content/image"
    "/content/video"
    "/var/files/pdfs"
  }
}

httpOnly

고정 연결이 활성화되면 디스패처 모듈은 renderid 쿠키를 설정합니다. 이 쿠키에는 보안을 강화하기 위해 추가해야 하는 httponly 플래그가 없습니다. 이렇게 하려면 httpOnly 구성 파일의 /stickyConnections 노드에서 dispatcher.any 속성을 설정합니다. 속성 값(0 또는 1)은 renderid 쿠키에 HttpOnly 속성이 추가되었는지 여부를 정의합니다. 기본값은 0입니다. 즉, 속성이 추가되지 않습니다.
플래그에 대한 자세한 내용은 httponly 이 페이지를 HttpOnly참조하십시오.

secure

고정 연결이 활성화되면 디스패처 모듈은 renderid 쿠키를 설정합니다. 이 쿠키에는 보안을 강화하기 위해 추가해야 하는 보안 플래그가 없습니다. 이렇게 하려면 secure 구성 파일의 /stickyConnections 노드에서 dispatcher.any 속성을 설정합니다. 속성 값(0 또는 1)은 renderid 쿠키에 secure 속성이 추가되었는지 여부를 정의합니다. 기본값은 0입니다. 즉, 들어오는 요청이 안전할 경우 속성이 추가됩니다. 값이 1로 설정된 경우 들어오는 요청이 안전한지 여부에 관계없이 보안 플래그가 추가됩니다.

렌더링 연결 오류 처리

렌더링 서버에서 500 오류를 반환하거나 사용할 수 없을 때 디스패처 동작을 구성합니다.

상태 확인 페이지 지정

500 상태 코드가 발생할 때 확인되는 URL을 /health_check 지정하려면 속성을 사용합니다. 이 페이지가 500 상태 코드도 반환하는 경우 인스턴스는 사용할 수 없는 것으로 간주되고 구성 가능한 시간 페널티( /unavailablePenalty )가 렌더링에 적용된 후 다시 시도합니다.
/health_check
  {
  # Page gets contacted when an instance returns a 500
  /url "/health_check.html"
  }

페이지 다시 시도 지연 지정

/ retryDelay 속성은 Dispatcher가 팜 렌더와의 연결 시도 간 대기하는 시간(초)을 설정합니다. 각 라운드에 대해 Dispatcher가 렌더로의 연결을 시도하는 최대 수는 팜의 렌더링 수입니다.
디스패처는 명시적으로 정의되지 "1" 않은 /retryDelay 경우 값을 사용합니다. 기본값은 대부분의 경우 적절합니다.
/retryDelay "1"

재시도 횟수 구성

/numberOfRetries 속성은 Dispatcher가 렌더에서 수행하는 최대 연결 시도 횟수를 설정합니다. Dispatcher가 이 재시도 횟수 후 렌더링에 성공적으로 연결할 수 없는 경우 Dispatcher는 실패한 응답을 반환합니다.
각 라운드에 대해 Dispatcher가 렌더로의 연결을 시도하는 최대 수는 팜의 렌더링 수입니다. 따라서 Dispatcher가 연결을 시도하는 최대 수는 ( /numberOfRetries ) x(렌더링 수)입니다.
값이 명시적으로 정의되지 않은 경우 기본값은 5 ​입니다.
/numberOfRetries "5"

페일오버 메커니즘 사용

Dispatcher 팜의 장애 조치 메커니즘을 사용하여 원래 요청이 실패할 때 요청을 다른 렌더링으로 다시 전송합니다. 장애 조치(failover)가 활성화되면 Dispatcher의 동작은 다음과 같습니다.
  • 렌더링에 대한 요청이 HTTP 상태 503(UNAVAILABLE)을 반환하면 Dispatcher는 요청을 다른 렌더링으로 보냅니다.
  • 렌더링에 대한 요청이 HTTP 상태 50x(503 제외)를 반환하면 Dispatcher는 health_check 속성에 대해 구성된 페이지에 대한 요청을 보냅니다.
    • 상태 검사가 500(INTERNAL_SERVER_ERROR)을 반환하는 경우 Dispatcher는 원래 요청을 다른 렌더링으로 보냅니다.
    • 검사 결과 HTTP 상태 200이 반환되면 Dispatcher는 초기 HTTP 500 오류를 클라이언트에 반환합니다.
장애 조치를 활성화하려면 팜(또는 웹 사이트)에 다음 줄을 추가하십시오.
/failover "1" 

본문이 포함된 HTTP 요청을 다시 시도하기 위해 Dispatcher는 실제 컨텐츠를 스풀링하기 전에 Expect: 100-continue 요청 헤더를 렌더링으로 보냅니다. CQSE와 함께 CQ 5.5를 사용하면 100(계속) 또는 오류 코드로 즉시 응답할 수 있습니다. 다른 서블릿 컨테이너도 이 옵션을 지원해야 합니다.

중단 오류 무시 - /ignoreINTR

이 옵션은 일반적으로 필요하지 않습니다. 다음 로그 메시지가 표시되는 경우에만 이 기능을 사용해야 합니다.
Error while reading response: Interrupted system call
시스템 호출 객체가 NFS를 통해 액세스한 원격 시스템에 EINTR 있는 경우 모든 파일 시스템 지향 시스템 호출이 중단될 수 있습니다. 이러한 시스템 호출이 시간 초과되거나 중단될 수 있는지 여부는 기본 파일 시스템이 로컬 시스템에 마운트된 방식을 기반으로 합니다.
인스턴스에 이러한 구성이 있고 로그에 다음 메시지가 포함된 경우 /ignoreINTR 매개 변수를 사용하십시오.
Error while reading response: Interrupted system call
내부적으로 디스패처는 다음과 같이 표시될 수 있는 루프를 사용하여 원격 서버(즉, AEM)에서 응답을 읽습니다.
while (response not finished) { read more data }
이러한 메시지는 " EINTR " 섹션에서 read more data 발생할 때 생성되며 데이터가 수신되기 전에 신호가 수신될 때 생성됩니다.
이러한 인터럽트를 무시하려면 다음 매개 변수를 dispatcher.any (before /farms )에 추가할 수 있습니다.
/ignoreEINTR "1"
이 설정을 /ignoreEINTR "1" 설정하면 Dispatcher가 전체 응답을 읽을 때까지 데이터를 계속 읽으려고 시도합니다. 기본값은 0이며 옵션을 비활성화합니다.

전역 속성에 대한 패턴 디자인

Dispatcher 구성 파일의 여러 섹션은 클라이언트 요청에 대한 선택 기준으로 속성을 사용합니다. glob 전역 속성의 값은 Dispatcher가 요청한 리소스의 경로 또는 클라이언트의 IP 주소와 같은 요청의 측면과 비교하는 패턴입니다. 예를 들어, /filter 섹션의 항목은 글로벌 패턴을 사용하여 Dispatcher가 작업하거나 거부한 페이지의 경로를 식별합니다.
글로벌 값에는 와일드카드 문자 및 영숫자 문자가 포함될 수 있어 패턴을 정의할 수 있습니다.
와일드카드 문자
설명
*
문자열에서 0개 이상의 인접한 모든 문자와 일치합니다. 일치의 최종 문자는 다음 중 하나에 의해 결정됩니다.문자열의
문자는 패턴의 다음 문자와 일치하며 패턴 문자에는 다음 특성이 있습니다.
  • * 아님
  • 아니?
  • 문자(공백 포함) 또는 문자 클래스입니다.
  • 패턴의 끝에 도달했습니다.
문자 클래스 내부에서 이 캐릭터는 문자 그대로 해석됩니다.
*/geo* 노드 /content/geometrixx /content/geometrixx-outdoors 노드 아래의 모든 페이지와 일치합니다. 다음 HTTP 요청은 글로벌 패턴과 일치합니다.
  • "GET /content/geometrixx/en.html"
  • "GET /content/geometrixx-outdoors/en.html"
*outdoors/* 노드
아래의 모든 페이지와 /content/geometrixx-outdoors 일치합니다. 예를 들어 다음 HTTP 요청은 글로벌 패턴과 일치합니다.
  • "GET /content/geometrixx-outdoors/en.html"
?
모든 단일 문자와 일치합니다. 외부 문자 클래스를 사용합니다. 문자 클래스 내에서 이 문자는 문자 그대로 해석됩니다.
*outdoors/??/*
geometrixx-outdoors 사이트의 모든 언어에 대한 페이지와 일치합니다. 예를 들어 다음 HTTP 요청은 글로벌 패턴과 일치합니다.
  • "GET /content/geometrixx-outdoors/en/men.html"
다음 요청이 글로벌 패턴과 일치하지 않습니다.
  • "/content/geometrixx-outdoors/en.html"
[ and ]
문자 클래스의 시작과 끝을 표시합니다. 문자 클래스에는 하나 이상의 문자 범위와 단일 문자가 포함될 수 있습니다.
대상 문자가 문자 클래스 또는 정의된 범위 내의 문자와 일치하는 경우 일치합니다.
닫는 괄호가 포함되어 있지 않으면 패턴에서 일치하는 내용이 없습니다.
*[o]men.html*
다음 HTTP 요청과 일치합니다.
  • "GET /content/geometrixx-outdoors/en/women.html"
다음 HTTP 요청과 일치하지 않습니다.
  • "GET /content/geometrixx-outdoors/en/men.html"
*[o/]men.html* 다음
HTTP 요청과 일치합니다.
  • "GET /content/geometrixx-outdoors/en/women.html"
  • "GET /content/geometrixx-outdoors/en/men.html"
-
문자 범위를 나타냅니다. 문자 클래스에 사용하기 위해 문자 클래스 외부에서 이 문자는 문자 그대로 해석됩니다.
*[m-p]men.html* 다음 HTTP 요청과 일치합니다.
  • "GET /content/geometrixx-outdoors/en/women.html"
다음 HTTP 요청과 일치하지 않습니다.
  • "GET /content/geometrixx-outdoors/en/men.html"
!
다음에 나오는 문자 또는 문자 클래스를 무효화합니다. 문자 클래스 내에서 문자 및 문자 범위를 무효화하는 경우에만 사용합니다. 에 ^ wildcard 해당합니다.
문자 클래스 외부에서 이 문자는 문자 그대로 해석됩니다.
*[!o]men.html*
다음 HTTP 요청과 일치합니다.
  • "GET /content/geometrixx-outdoors/en/men.html"
다음 HTTP 요청과 일치하지 않습니다.
  • "GET /content/geometrixx-outdoors/en/women.html"
*[!o!/]men.html*
다음 HTTP 요청과 일치하지 않습니다.
  • "GET /content/geometrixx-outdoors/en/women.html" 또는 "GET /content/geometrixx-outdoors/en/men. html"
^
다음에 나오는 문자 또는 문자 범위를 무효화합니다. 문자 클래스 내에서 문자 및 문자 범위만 무효화하는 데 사용합니다. 와일드카드 문자와 ! 같습니다.
문자 클래스 외부에서 이 문자는 문자 그대로 해석됩니다.
와일드카드 문자의 예는 예제 패턴의 ! 문자를 ! ^ 문자로 대체하여 적용됩니다.

로깅

웹 서버 구성에서 다음을 설정할 수 있습니다.
  • Dispatcher 로그 파일의 위치입니다.
  • 로그 수준입니다.
자세한 내용은 웹 서버 설명서 및 Dispatcher 인스턴스의 Readme 파일을 참조하십시오.
Apache Rotated/Pipped Logs
Apache 웹 서버를 사용하는 경우 회전 및/또는 파이프라인 로그에 표준 기능을 사용할 수 있습니다. 예를 들어 파이프 로그 사용:
DispatcherLog "| /usr/apache/bin/rotatelogs logs/dispatcher.log%Y%m%d 604800"
자동으로 회전됩니다.
  • 디스패처 로그 파일;타임스탬프가 있는 경우(logs/dispatcher.log%Y%m%d).
  • 매주(60 x 60 x 24 x 7 = 604800초)
로그 순환 및 파이프라인 로그에 대한 Apache 웹 서버 설명서를 참조하십시오.예: Apache 2.4 .
설치 시 기본 로그 수준이 높음(예: 레벨 3 = 디버그)이므로 디스패처가 모든 오류 및 경고를 기록합니다. 이것은 초기 단계에서 매우 유용하다.
그러나 이렇게 하려면 추가 리소스가 필요하므로 Dispatcher가 사용자의 요구 사항에 ​따라 원활하게 작동하는 경우에는 로그 수준을 낮출 수 있습니다.

추적 로깅

Dispatcher의 기타 향상된 기능 중 4.2.0 버전에서도 추적 로깅을 도입했습니다.
디버그 로깅보다 수준이 높으므로 로그에 추가 정보가 표시됩니다. 다음에 대한 로깅을 추가합니다.
  • 전달된 헤더의 값;
  • 특정 작업에 적용되는 규칙입니다.
웹 서버에서 로그 수준을 로 설정하여 추적 로깅을 활성화할 4 수 있습니다.
다음은 추적이 활성화된 로그의 예입니다.
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Host] = "localhost:8443"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[User-Agent] = "curl/7.43.0"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Accept] = "*/*"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Client-Cert] = "(null)"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Via] = "1.1 localhost:8443 (dispatcher)"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-For] = "::1"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL] = "on"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Cipher] = "DHE-RSA-AES256-SHA"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Session-ID] = "ba931f5e4925c2dde572d766fdd436375e15a0fd24577b91f4a4d51232a934ae"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-Port] = "8443"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Server-Agent] = "Communique-Dispatcher"

차단 규칙과 일치하는 파일이 요청되면 이벤트가 기록됩니다.
[Thu Mar 03 14:42:45 2016] [T] [11831] 'GET /content.infinity.json HTTP/1.1' was blocked because of /0082

기본 작업 확인

웹 서버의 기본 작업 및 상호 작용을 확인하려면 Dispatcher 및 AEM 인스턴스를 다음 단계를 사용할 수 있습니다.
  1. loglevel 다음으로 3 설정합니다.
  2. 웹 서버 시작;디스패처가 시작됩니다.
  3. AEM 인스턴스를 시작합니다.
  4. 웹 서버 및 디스패처의 로그 및 오류 파일을 확인합니다. 웹 서버에 따라 다음과 같은 메시지가 표시됩니다. [Thu May 30 05:16:36 2002] [notice] Apache/2.0.50 (Unix) configured 및: [Fri Jan 19 17:22:16 2001] [I] [19096] Dispatcher initialized (build XXXX)
  5. 웹 서버를 통해 웹 사이트를 서핑합니다. 컨텐츠가 필요에 따라 표시되는지 확인합니다. 예를 들어 AEM이 포트에서 실행되는 로컬 설치에서는 4502 웹 서버가 두 가지 모두를 사용하여 웹 사이트 콘솔에 80 액세스합니다. https://localhost:4502/libs/wcm/core/content/siteadmin.html https://localhost:80/libs/wcm/core/content/siteadmin.html 결과는 동일해야 한다. 동일한 메커니즘을 사용하여 다른 페이지에 대한 액세스를 확인합니다.
  6. 캐시 디렉토리가 채워지는지 확인합니다.
  7. 캐시를 올바르게 플러시하고 있는지 확인하려면 페이지를 활성화합니다.
  8. 모든 것이 올바르게 작동하면 에서 loglevel 받는 사람 수를 줄일 수 0 있습니다.

여러 Dispatcher 사용

복잡한 설정에서 여러 Dispatcher를 사용할 수 있습니다. 예를 들어 다음을 사용할 수 있습니다.
  • 인트라넷에 웹 사이트를 게시할 하나의 Dispatcher
  • 다른 주소와 보안 설정이 다른 두 번째 Dispatcher가 동일한 콘텐츠를 인터넷에 게시합니다.
이러한 경우 각 요청이 하나의 Dispatcher만 통과하는지 확인하십시오. Dispatcher는 다른 Dispatcher의 요청을 처리하지 않습니다. 따라서 Dispatcher가 모두 AEM 웹 사이트에 직접 액세스하도록 하십시오.

디버깅

요청에 헤더를 추가할 X-Dispatcher-Info 때 Dispatcher는 대상이 캐시되었는지, 캐시되어 반환되었는지 또는 전혀 캐시할 수 없는지를 확인합니다. 응답 헤더에는 읽을 수 있는 형식으로 이 정보가 X-Cache-Info 들어 있습니다. 이러한 응답 헤더를 사용하여 디스패처가 캐시한 응답과 관련된 문제를 디버깅할 수 있습니다.
이 기능은 기본적으로 활성화되어 있지 않으므로 응답 헤더를 X-Cache-Info 포함하려면 팜에 다음 항목이 포함되어야 합니다.
/info "1"

예,
/farm
{
    /mywebsite
    {
        # Include X-Cache-Info response header if X-Dispatcher-Info is in request header
        /info "1"
    }
}

또한 헤더에는 값이 필요하지 X-Dispatcher-Info 않지만 테스트에 curl 사용할 경우 다음과 같은 헤더를 전송하려면 값을 제공해야 합니다.
curl -v -H "X-Dispatcher-Info: true" https://localhost/content/we-retail/us/en.html

다음은 반환할 응답 헤더가 들어 X-Dispatcher-Info 있는 목록입니다.
  • 캐시됨 대상 파일이 캐시에 들어 있으며 디스패처는 이를 전달하는 것이 유효하다고 판단했습니다.
  • 캐싱 대상 파일이 캐시에 포함되어 있지 않으며 디스패처는 출력을 캐시하여 전달하는 것이 유효하다고 판단했습니다.
  • 캐싱:stat 파일이 더 최근 ​파일대상 파일이 캐시에 포함되어 있지만, 더 최신 상태 파일에 의해 무효화됩니다. 디스패처가 대상 파일을 삭제하고 출력에서 다시 만들어 전달합니다.
  • 취소할 수 없음:문서 루트 ​없음팜의 구성에 문서 루트(구성 요소)가 포함되어 있지 않습니다 cache.docroot .
  • 취소할 수 없음:캐시 파일 경로가 너무 깁니다. 대상 파일(문서 루트 및 URL 파일의 연결)이 시스템에서 가장 오래 사용할 수 있는 파일 이름을 초과합니다.
  • 취소할 수 없음:임시 파일 경로가 너무 깁니다. 임시 파일 이름 템플릿이 시스템에서 가능한 가장 긴 파일 이름을 초과합니다. 디스패처는 캐시된 파일을 실제로 만들거나 덮어쓰기 전에 먼저 임시 파일을 만듭니다. 임시 파일 이름은 대상 파일 이름이며 여기에 _YYYYXXXXXX 추가된 문자가 있으며, 여기에서 Y X 이름을 변경하여 고유한 이름을 만듭니다.
  • 취소할 수 없음:요청 URL에 확장자가 없습니다. 요청 URL에 확장자가 없거나 파일 확장자 다음의 경로가 있습니다. 예: /test.html/a/path Adobe
  • 취소할 수 없음:요청이 GET 또는 HEAD가 ​아님HTTP 메서드가 GET이나 HEAD가 아닙니다. 디스패처는 출력에 캐시하지 말아야 하는 동적 데이터가 포함된다고 가정합니다.
  • 취소할 수 없음:요청에 쿼리 문자열이 포함됨 요청에 쿼리 문자열이 포함되어 있습니다. 디스패처는 출력이 지정된 쿼리 문자열에 따라 달라지므로 캐시하지 않는다고 가정합니다.
  • 취소할 수 없음:세션 관리자가 인증하지 않았습니다. 팜의 캐시는 세션 관리자(구성에 sessionmanagement 노드가 포함됨)가 제어되며 요청에 적절한 인증 정보가 포함되지 않았습니다.
  • 취소할 수 없음:권한 포함 팜은 출력()을 캐시할 수 없으며 요청에 인증 정보가 들어 있습니다. allowAuthorized 0
  • 취소할 수 없음:target은 디렉토리입니다. 대상 파일은 디렉토리입니다. 이것은 URL과 일부 하위 URL이 모두 캐시 가능한 출력을 포함하는 개념적 실수를 가리키는 것일 수 있습니다. 예를 들어, 요청이 /test.html/a/file.ext 먼저 오고 캐시 가능한 출력을 포함하는 경우 디스패처는 후속 요청의 출력을 캐시할 수 없습니다 /test.html .
  • 취소할 수 없음:요청 URL에 후행 슬래시가 있습니다. 요청 URL에 후행 슬래시가 있습니다.
  • 취소할 수 없음:요청 URL이 캐시 규칙에 없습니다. 팜의 캐시 규칙은 일부 요청 URL의 출력을 명시적으로 캐시하지 않습니다.
  • 취소할 수 없음:권한 검사기가 액세스를 거부했습니다. 팜의 인증 검사기가 캐시된 파일에 대한 액세스를 거부했습니다.
  • 취소할 수 없음:세션이 잘못되었습니다 . 팜의 캐시는 세션 관리자(구성이 sessionmanagement 노드를 포함)의 영향을 받으며 사용자의 세션이 유효하지 않거나 더 이상 유효하지 않습니다.
  • **취소할 수 없음:응답에 no_cache **포함 원격 서버가 Dispatcher: no_cache 헤더를 반환하여 디스패처가 출력을 캐시하도록 했습니다.
  • 취소할 수 없음:응답 컨텐츠 길이가 0입니다 . 응답의 컨텐츠 길이는 0입니다.디스패처는 길이가 0인 파일을 만들지 않습니다.