設定 Dispatcher

注意

Dispatcher 版本與 AEM 無關。如果您依循連結至 Dispatcher 文件,且該連結內嵌於舊版 AEM 的文件中,您可能會被重新導向至本頁。

以下各節介紹如何配置Dispatcher的各個方面。

支援IPv4和IPv6

AEM和Dispatcher的所有元素都可安裝在IPv4和IPv6網路中。 請參見IPV4和IPV6

Dispatcher Configuration Files

預設情況下,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.anyfarm_5.any包含1到5的場的配置,則可以按如下方式包括它們:

/farms
  {
  $include "farm_*.any"
  }

使用環境變數

您可以在dispatcher.any檔案的字串值屬性中使用環境變數,而不是硬式編碼值。 要包含環境變數的值,請使用${variable_name}格式。

例如,如果dispatcher.any檔案與快取目錄位於同一目錄中,則可使用docroot屬性的以下值:

/docroot "${PWD}/cache"

另一個範例是,如果您建立名為PUBLISH_IP的環境變數,以儲存AEM發佈例項的主機名稱,則可使用下列/renders屬性組態:

/renders {
  /0001 {
    /hostname "${PUBLISH_IP}"
    /port "8443"
  }
}

命名Dispatcher實例

使用/name屬性指定唯一名稱以標識您的Dispatcher實例。 /name屬性是配置結構中的頂級屬性。

定義場

/farms屬性定義一組或多組Dispatcher行為,其中每組行為與不同的網站或URL相關聯。 /farms屬性可包含單一農場或多個農場:

  • 當您希望Dispatcher以相同方式處理所有網頁或網站時,請使用單一場。
  • 當您的網站或不同網站的不同區域需要不同的Dispatcher行為時,可建立多個場。

/farms屬性是配置結構中的頂級屬性。 要定義群,請將子屬性添加到/farms屬性。 使用屬性名稱,可唯一標識Dispatcher實例中的群。

/farmname屬性是多值的,包含定義Dispatcher行為的其他屬性:

  • 群套用之頁面的URL。
  • 一或多個服務URL(通常為AEM發佈例項),用於轉譯檔案。
  • 用於負載平衡多份檔案轉譯器的統計資料。
  • 其他數種行為,例如要快取的檔案和位置。

值可包含任何英數字元(a-z, 0-9)。 以下示例顯示了名為/daycom/docsdaycom的兩個場的骨架定義:

#name of dispatcher
/name "day sites"

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

如果您使用多個演算場,系統會自下而上評估清單。 在為您的網站定義虛擬主機時,這特別相關。

每個農場屬性都可包含下列子屬性:

屬性名稱 說明
/homepage 預設首頁(選用)(僅限IIS)
/clienders 要傳遞的用戶端HTTP要求的標頭。
/virtualhosts 此場的虛擬主機。
/sessionmanagement 支援作業管理和驗證。
/renders 提供轉譯頁面的伺服器(通常為AEM發佈例項)。
/filter 定義Dispatcher啟用訪問的URL。
/vanity_urls 設定虛名URL的存取權。
/propagateSyndPost 支援轉送匯集請求。
/cache 設定快取行為。
/statistics 定義負載平衡計算的統計類別。
/stickyConnectionsFor 包含自黏檔案的資料夾。
/health_check 用於確定伺服器可用性的URL。
/retryDelay 重試失敗連接之前的延遲。
/unavailableDestamy 影響負載平衡計算統計資料的罰款。
/failover 當原始請求失敗時,將請求重新傳送至不同的轉譯。
/auth_checker 如需權限相關快取,請參閱快取保全內容

指定預設頁面(僅限IIS)- /homepage

注意

/homepage參數(僅限IIS)不再有效。 您應改用IIS URL Rewrite Module

如果您使用Apache,則應使用mod_rewrite模組。 如需mod_rewrite的相關資訊,請參閱Apache網站檔案(例如Apache 2.4)。 當使用mod_rewrite時,建議使用標幟​**'passthrough|PT'(傳遞至下一個處理常式)**​來強制重寫引擎將內部request_rec結構的uri欄位設為filename欄位的值。

指定要傳遞至的HTTP標題

/clientheaders屬性定義Dispatcher從用戶端HTTP請求傳遞至轉譯器(AEM例項)的HTTP標題清單。

依預設,Dispatcher會將標準HTTP標頭轉送至AEM例項。 在某些情況下,您可能需要轉寄其他標題,或移除特定標題:

  • 新增AEM例項在HTTP請求中預期的標題,例如自訂標題。
  • 移除僅與Web伺服器相關的標題,例如驗證標題。

如果您自訂要傳遞的標題集,您必須指定完整的標題清單,包括通常預設包含的標題。

例如,處理發佈例項之頁面啟動請求的Dispatcher例項需要/clientheaders區段中的PATH標題。 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][*]

以下配置示例處理myCompany的。com和。ch域以及mySubDivision的所有域的請求:

   /virtualhosts
    {
    "www.myCompany.com"
    "www.myCompany.ch"
    "www.mySubDivison.*"
    }

以下配置處理​all​請求:

   /virtualhosts
    {
    "*"
    }

解析虛擬主機

當Dispatcher收到HTTP或HTTPS請求時,它會找到最符合請求host, urischeme標題的虛擬主機值。 Dispatcher會依下列順序評估virtualhosts屬性中的值:

  • Dispatcher從最低的群開始,並在dispatcher.any檔案中向上進行。
  • 對於每個群,Dispatcher從virtualhosts屬性中的最頂層值開始,並從值清單中繼續。

Dispatcher以下列方式查找最匹配的虛擬主機值:

  • 使用第一個遇到的虛擬主機,它與請求的hostschemeuri中的所有三個匹配。
  • 如果沒有virtualhosts值具有與請求的schemeuri都匹配的schemeuri部分,則使用與請求的host匹配的第一個遇到的虛擬主機。
  • 如果沒有virtualhosts值的主機部分與請求的主機匹配,則使用最頂端群的最頂端虛擬主機。

因此,您應將預設虛擬主機放在dispatcher.any檔案最頂端群中virtualhosts屬性的頂端。

虛擬主機解析度示例

以下示例代表dispatcher.any檔案中的一個代碼片段,該檔案定義兩個Dispatcher場,每個群定義一個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 Security Checklist

/sessionmanagement屬性是/farms的子屬性。

注意

如果網站的區段使用不同的存取需求,您需要定義多個場。

/ sessionmanagementas幾個子參數:

/directory (mandatory)

儲存會話資訊的目錄。 如果目錄不存在,則建立該目錄。

注意

配置目錄子參數​時,不要​指向根資料夾(/directory "/"),因為它可能導致嚴重問題。 您應始終指定儲存會話資訊的資料夾的路徑。 例如:

/sessionmanagement
  {
  /directory "/usr/local/apache/.sessions"
  }

/encode (選用)

會話資訊的編碼方式。 使用md5加密使用md5演算法,或使用hex加密十六進位編碼。 如果您加密會話資料,則具有檔案系統訪問權限的用戶無法讀取會話內容。 預設值為md5

/header (可選)

儲存授權資訊的HTTP標題或Cookie的名稱。 如果您將資訊儲存在http標題中,請使用HTTP:<header-name>。 若要將資訊儲存在Cookie中,請使用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區段識別與dispatcher在同一部電腦上執行的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" ,導致Dispatcher無限期等待。

/receiveTimeout

指定允許回應花費的時間(以毫秒為單位)。 預設值為"600000" ,導致Dispatcher等待10分鐘。 設定"0"可完全消除超時。

如果在剖析回應標題時到達逾時,會傳回504(錯誤閘道)的HTTP狀態。 如果在讀取響應主體時到達超時,Dispatcher將向客戶端返回不完整的響應,但刪除可能已寫入的任何快取檔案。

/ipv4

指定Dispatcher是使用getaddrinfo函式(對於IPv6)還是gethostbyname函式(對於IPv4)來獲取渲染的IP地址。 值0會使用getaddrinfo。 值1會使用gethostbyname。 預設值為0

getaddrinfo函式返回IP地址清單。 Dispatcher會重複地址清單,直到它建立TCP/IP連接。 因此,當演算主機名與多個IP位址關聯時,ipv4屬性很重要,而主機會回應getaddrinfo函式,傳回IP位址清單,其順序一律相同。 在這種情況下,您應使用gethostbyname函式,以便Dispatcher所連接的IP地址是隨機的。

Amazon Elastic Load Balancing(ELB)是一種服務,它以可能相同的順序IP位址清單回應getaddrinfo。

/secure

如果/secure屬性的值為"1",Dispatcher會使用HTTPS與AEM例項通訊。 有關其他詳細資訊,另請參閱將Dispatcher配置為使用SSL

/always-resolve

使用Dispatcher版本​4.1.6,您可以按如下方式配置/always-resolve屬性:

  • 設定為"1"時,它將解析每個請求的主機名(Dispatcher絕不會快取任何IP地址)。 由於需要額外呼叫來取得每個請求的主機資訊,因此可能會對效能造成輕微影響。
  • 如果未設定屬性,預設會快取IP位址。

此外,此屬性也可用於您遇到動態IP解析度問題時,如下列範例所示:

/renders {
  /0001 {
     /hostname "host-name-here"
     /port "4502"
     /ipv4 "1"
     /always-resolve "1"
     }
  }

設定內容存取

使用/filter部分指定Dispatcher接受的HTTP請求。 所有其他請求都會以404錯誤碼(找不到頁面)傳回至網頁伺服器。 如果不存在/filter部分,則接受所有請求。

注意: statfile的請 求一律拒絕。

注意

有關使用Dispatcher限制訪問時的進一步考慮事項,請參見 Dispatcher Security Checklist。 此外,請閱讀AEM安全性檢查清單,以取得有關AEM安裝的其他安全性詳細資訊。

/filter區段由一系列規則組成,這些規則會根據HTTP請求的請求行部分的模式拒絕或允許訪問內容。 您應對/filter區段使用允許清單策略:

  • 首先,拒絕訪問所有內容。
  • 視需要允許存取內容。

定義過濾器

/filter區段中的每個項目都包括類型和模式,該類型和模式與請求行或整個請求行的特定元素匹配。 每個篩選器都可包含下列項目:

  • 類型:指 /type 出是否允許或拒絕對符合模式的請求的訪問。值可以是allowdeny

  • 請求行的元素: 包含 /method、、 /url/query /protocol 根據HTTP請求請求請求行部分的這些特定部分篩選請求的模式。偏好的篩選方法是篩選請求行的元素(而非整個請求行)。

  • 請求行的進階元素: 從Dispatcher 4.2.0開始,有四個新的篩選元素可供使用。這些新元素分別為/path/selectors/extension/suffix。 包含一或多個這些項目,以進一步控制URL模式。

注意

如需有關每個元素所參考之請求行中哪一部分的詳細資訊,請參閱Sling URL Decomposition wiki頁面。

  • glob屬性:該 /glob 屬性用於與HTTP請求的整個請求行匹配。
注意

Dispatcher中不建議使用全域篩選。 因此,您應避免在/filter區段中使用全域,因為這可能會導致安全性問題。 所以,它不是:

/glob "* *.css *"

您應使用

/url "*.css"

HTTP請求的請求行部分

HTTP/1.1定義request-line如下:

Method Request-URI HTTP-Version<CRLF>

<CRLF>字元代表回歸的歸位字元,後面接著行動態消息。 以下範例是當客戶要求WKND網站的美文網頁時收到的請求行:

GET /content/wknd/us/en.html HTTP.1.1<CRLF>

您的模式必須考慮請求行中的空格字元和<CRLF>字元。

雙引號與單引號

建立篩選規則時,請使用雙引號"pattern"來建立簡單模式。 如果您使用Dispatcher 4.2.0或更新版本,而您的模式包含規則運算式,則必須將regex模式'(pattern1|pattern2)'括在單引號內。

規則運算式

在4.2.0版以後的Dispatcher版本中,您可以在篩選模式中包含POSIX Extended Regular Expressions。

過濾器故障排除

如果您的篩選器未以預期的方式觸發,請啟用分派器上的追蹤記錄,以便您查看哪個篩選器正在攔截請求。

範例篩選:全部拒絕

以下示例過濾器部分使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*"  }
}

如果您的發佈例項使用Web應用程式內容(例如發佈),您也可以將它新增至您的篩選定義。

/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 。)

注意

有關動態媒體的篩選00300031適用於AEM 6.0及更新版本。

如果您選擇延伸存取權,請考慮下列建議:

  • 如果您使用CQ 5.4版或舊版,對/admin的外部存取應一律為​完全​停用。

  • 允許訪問/libs中的檔案時,必須小心。 應允許個人存取。

  • 拒絕對複製配置的訪問,因此無法查看:

    • /etc/replication.xml*
    • /etc/replication.infinity.json*
  • 拒絕對Google小工具的反向代理訪問:

    • /libs/opensocial/proxy*

視您的安裝而定,/libs/apps或其他位置下可能會有額外的資源,必須提供這些資源。 您可以使用access.log檔案作為確定外部訪問的資源的一種方法。

注意

對控制台和目錄的訪問可能給生產環境帶來安全風險。 除非您有明確的理由,否則應保持停用狀態(加上註解)。

注意

如果您在發佈環境中使用報表,應將Dispatcher配置為拒絕外部訪客對/etc/reports的訪問。

限制查詢字串

自Dispatcher 4.1.5版起,請使用/filter區段來限制查詢字串。 強烈建議您透過allow篩選元素明確允許查詢字串並排除一般允許。

單個條目可以具有globmethodurlqueryversion的某些組合,但不能同時具有這兩者。 以下示例允許a=*查詢字串並拒絕解析到/etc節點的URL的所有其它查詢字串:

/filter {
 /0001 { /type "deny" /method "POST" /url "/etc/*" }
 /0002 { /type "allow" /method "GET" /url "/etc/*" /query "a=*" }
}
注意

如果規則包含/query,則只會比對包含查詢字串的請求,並比對所提供的查詢模式。

在上例中,如果對/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 Security

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
  • /content/../libs/foundation/components/text/text.jsp
  • /content/.{.}/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
  • /content.-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]/(@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.html
  • /content/add_valid_page.html?debug=layout
  • /projects
  • /tagging
  • /etc/replication.html
  • /etc/cloudservices.html
  • /welcome

在終端或命令提示符中發出以下命令,以確定是否啟用了匿名寫訪問。 您不應該能夠將資料寫入節點。

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的存取權

設定Dispatcher以啟用對您AEM頁面所設定虛名URL的存取權。

啟用虛名URL的存取時,Dispatcher會定期呼叫在演算例項上執行的服務,以取得虛名URL的清單。 Dispatcher將此清單儲存在本地檔案中。 當頁面請求因/filter區段中的篩選器而遭拒時,Dispatcher會查閱虛名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的例項,您必須從「軟體散發」安裝VanityURLS-Components套件,以啟用虛名URL服務。 (如需詳細資訊,請參閱軟體散發。)

請依照下列程式來啟用虛名URL的存取權。

  1. 如果您的轉譯服務是AEM例項,請在發佈例項上安裝「com.adobe.granite.dispatcher.vanityurl.content」套件(請參閱上述附註)。
  2. 針對您為AEM或CQ頁面設定的每個虛名URL,請確定/filter組態會拒絕URL。 如有必要,請新增拒絕URL的篩選器。
  3. /farms下方新增/vanity_urls區段。
  4. 重新啟動Apache Web伺服器。

轉發協同內容請求- /propagateSyndPost

協同內容請求通常僅針對Dispatcher,因此依預設,它們不會傳送至轉譯器(例如AEM例項)。

如有必要,請將/propagateSyndPost屬性設定為"1" ,以將匯集請求轉發到Dispatcher。 若已設定,您必須確保篩選區段中不會拒絕POST要求。

配置Dispatcher快取- /cache

/cache部分控制Dispatcher如何快取文檔。 設定數個子屬性以實作快取策略:

  • /docroot
  • /statfile
  • /serveStaleOnError
  • /allowAuthorized
  • /rules
  • /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
    }
  }
  
注意

對於權限敏感型快取,請讀取Caching Secured Content

指定快取目錄

/docroot屬性標識儲存快取檔案的目錄。

注意

該值必須與Web伺服器的文檔根路徑完全相同,這樣Dispatcher和Web伺服器才能處理相同的檔案。
Web伺服器負責在使用調度程式快取檔案時提供正確的狀態代碼,因此,Web伺服器也必須找到它。

如果您使用多個農場,則每個農場必須使用不同的檔案根目錄。

命名Statfile

/statfile屬性標識要用作statfile的檔案。 Dispatcher使用此檔案註冊最近內容更新的時間。 statfile可以是Web伺服器上的任何檔案。

statfile沒有內容。 更新內容時,Dispatcher會更新時間戳記。 預設的statfile名為.stat ,並儲存在docroot中。 Dispatcher阻止對statfile的訪問。

注意

如果配置了/statfileslevel ,則Dispatcher會忽略/statfile屬性,並使用.stat作為名稱。

發生錯誤時服務過時文檔

/serveStaleOnError屬性控制當渲染伺服器返回錯誤時,Dispatcher是否返回無效的文檔。 預設情況下,當觸動statfile並使快取內容無效時,Dispatcher會在下次請求快取內容時刪除該內容。

如果/serveStaleOnError設定為"1" ,則Dispatcher不會從快取中刪除無效內容,除非渲染伺服器返回成功響應。 來自AEM的5xx回應或連線逾時會導致Dispatcher提供過時的內容,並回應及HTTP狀態111(重新驗證失敗)。

使用驗證時的快取

/allowAuthorized屬性控制是否快取包含以下任何驗證資訊的請求:

  • authorization標題
  • 名為authorization的Cookie
  • 名為login-token的Cookie

根據預設,包含此驗證資訊的請求不會快取,因為當快取檔案傳回給用戶端時,不會執行驗證。 此配置可防止Dispatcher向沒有必要權限的用戶提供快取的文檔。

不過,如果您的要求允許快取已驗證的檔案,請將/allowAuthorized設為:

/allowAuthorized "1"

注意

要啟用會話管理(使用/sessionmanagement屬性),/allowAuthorized屬性必須設定為"0"

指定要快取的文檔

/rules屬性控制根據文檔路徑快取哪些文檔。 無論/rules屬性如何,Dispatcher都不會在下列情況下快取文檔:

  • 如果請求URI包含問號(?)。

    • 這通常表示動態頁面,例如不需要快取的搜尋結果。
  • 缺少檔案副檔名。

    • Web 伺服器需要副檔名來判斷文件類型 (MIME 類型)。
  • 驗證標頭已設定 (這可以設定)。

  • 如果AEM例項以下列標題回應:

    • no-cache
    • no-store
    • must-revalidate
注意

GET 或 HEAD (用於 HTTP 標頭) 方法可讓 Dispatcher 快取。有關響應標頭快取的其他資訊,請參見快取HTTP響應標頭部分。

/rules屬性中的每個項目都包含glob模式和類型:

  • glob模式用於匹配文檔的路徑。
  • 類型指示是否快取與glob模式匹配的文檔。 值可以是允許(快取檔案)或拒絕(永遠呈現檔案)。

如果您沒有動態頁面(超出上述規則已排除的頁面),您可以設定Dispatcher以快取所有內容。 此規則區段的外觀如下:

/rules
  {
    /0000  {  /glob "*"   /type "allow" }
  }

有關全局屬性的資訊,請參見為全局屬性設計模式

如果您頁面中有某些區段是動態的(例如新聞應用程式),或是在關閉的使用者群組中,您可以定義例外:

注意

不得快取已關閉的使用者群組,因為未檢查快取頁面的使用者權限。

/rules
  {
   /0000  { /glob "*" /type "allow" }
   /0001  { /glob "/en/news/*" /type "deny" }
   /0002  { /glob "*/private/*" /type "deny"  }
  }

壓縮

在Apache Web伺服器上,您可以壓縮快取的檔案。 壓縮允許Apache在客戶端請求時以壓縮形式返回文檔。 通過啟用Apache模組mod_deflate自動執行壓縮,例如:

AddOutputFilterByType DEFLATE text/plain

預設情況下,該模組與Apache 2.x一起安裝。

按資料夾級別使檔案失效

使用/statfileslevel屬性,根據快取檔案的路徑使其無效:

  • Dispatcher會在每個資料夾中,從資料夾建立.stat檔案至您指定的層級。 docroot資料夾是0級。

  • 通過觸摸.stat檔案,檔案將失效。 將.stat檔案的上次修改日期與快取文檔的上次修改日期進行比較。 如果.stat檔案較新,則會重新提取文檔。

  • 當位於特定級別的檔案被無效時,從docroot ​的​所有.stat檔案都將被觸碰無效檔案或已配置的statsfilevel(以較小者為準)的級別。

    • 例如:如果您將statfileslevel屬性設為6,而某個檔案在5級失效,則每個從docroot到5的.stat檔案都將被觸碰。 繼續此範例,如果檔案在7級時失效,則每隔一次。 stat 檔案從docroot移至6時,將會觸動(自此 /statfileslevel = "6"起)。

只有沿著無效檔案的路徑​的資源​受到影響。 請考慮下列範例:網站使用結構/content/myWebsite/xx/.如果您將statfileslevel設為3,則會建立.stat檔案,如下所示:

  • docroot
  • /content
  • /content/myWebsite
  • /content/myWebsite/*xx*

/content/myWebsite/xx中的檔案失效時,從docroot到/content/myWebsite/xx的每個.stat檔案都會被觸碰。 這僅適用於/content/myWebsite/xx,而不適用於/content/myWebsite/yy/content/anotherWebSite

注意

通過發送額外的標題CQ-Action-Scope:ResourceOnly可以防止失效。 這可用於刷新特定資源,而不使快取的其他部分失效。 有關詳細資訊,請參見此頁手動使Dispatcher Cache無效。

注意

如果為/statfileslevel屬性指定值,則會忽略/statfile屬性。

自動使快取檔案無效

/invalidate屬性定義在更新內容時自動失效的文檔。

自動失效時,Dispatcher不會在內容更新後刪除快取檔案,但會在下次要求時檢查檔案的有效性。 在內容更新明確刪除之前,快取中未自動失效的檔案仍會保留在快取中。

自動失效通常用於HTML頁面。 HTML頁面通常包含其他頁面的連結,因此很難判斷內容更新是否會影響頁面。 若要確保內容更新時所有相關頁面都無效,請自動使所有HTML頁面無效。 下列設定會使所有HTML頁面失效:

  /invalidate
  {
   /0000  { /glob "*" /type "deny" }
   /0001  { /glob "*.html" /type "allow" }
  }

有關全局屬性的資訊,請參見為全局屬性設計模式

此配置在/content/wknd/us/en激活時導致以下活動:

  • 所有檔案都帶有pattern en。*已從/content/wknd/us資料夾中移除。
  • /content/wknd/us/en./_jcr_content資料夾已移除。
  • 不會立即刪除與/invalidate配置匹配的所有其他檔案。 當下次請求發生時,這些檔案將被刪除。 在我們的範例中,/content/wknd.html不會刪除,當要求/content/wknd.html時,會刪除它。

如果您提供自動產生的PDF和ZIP檔案供下載,則可能也必須自動使這些檔案失效。 配置示例如下所示:

/invalidate
  {
   /0000 { /glob "*" /type "deny" }
   /0001 { /glob "*.html" /type "allow" }
   /0002 { /glob "*.zip" /type "allow" }
   /0003 { /glob "*.pdf" /type "allow" }
  }

AEM與Adobe Analytics的整合可在您網站的analytics.sitecatalyst.js檔案中提供設定資料。 隨Dispatcher提供的dispatcher.any示例檔案包含此檔案的以下失效規則:

{
   /glob "*/analytics.sitecatalyst.js"  /type "allow"
}

使用自定義失效指令碼

/invalidateHandler屬性允許您定義一個指令碼,該指令碼被調用用於Dispatcher收到的每個失效請求。

調用時使用以下引數:

  • Handle —— 已失效的內容路徑
  • 動作——複製動作(例如啟動、停用)
  • 動作範圍——複製動作的範圍(空白,除非傳送CQ-Action-Scope: ResourceOnly的標題,否則請參閱從AEM停用快取頁面,以取得詳細資訊)

這可用於涵蓋許多不同的使用案例,例如使其他應用程式特定快取無效,或處理頁面的外部化URL及其在Adobe中的位置不符合內容路徑的案例。

下面的示例指令碼記錄對檔案的每個無效請求。

/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屬性:

  • 要忽略參數,請建立允許該參數的全局屬性。
  • 若要防止快取頁面,請建立拒絕參數的全域屬性。

下列範例會使Dispatcher忽略q參數,以便快取包含q參數的請求URL:

/ignoreUrlParams
{
    /0001 { /glob "*" /type "deny" }
    /0002 { /glob "q" /type "allow" }
}

使用ignoreUrlParams值範例時,下列HTTP請求會因為q參數被忽略而快取頁面:

GET /mypage.html?q=5

使用範例ignoreUrlParams值時,下列HTTP要求會使至​not​的頁面快取,因為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"
  }
}
注意

另請注意,不允許使用檔案全域字元。 如需詳細資訊,請參閱設計全域屬性的圖樣

注意

如果您需要Dispatcher來儲存和傳送來自AEM的ETag回應標頭,請執行下列動作:

  • /cache/headers區段中新增標題名稱。
  • 在與Dispatcher相關的部分中添加以下Apache指令:
FileETag none

Dispatcher Cache檔案權限

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使用分數來判斷要傳送請求的演算。

您建立的每個類別都會定義全域模式。 Dispatcher將請求內容的URI與這些模式進行比較,以確定請求內容的類別:

  • 類別的順序決定它們與URI的比較順序。
  • 與URI匹配的第一個類別模式是檔案的類別。 不再評估類別模式。

Dispatcher最多支援8個統計類別。 如果您定義8個以上的類別,則僅使用前8個類別。

演算選擇

每次Dispatcher需要渲染頁時,它都使用以下演算法來選擇渲染:

  1. 如果請求包含renderid Cookie中的演算名稱,Dispatcher會使用該演算。

  2. 如果請求未包含renderid Cookie,Dispatcher會比較演算統計資料:

    1. Dispatcher會決定請求URI的類別。
    2. Dispatcher會決定哪個演算具有該類別最低的回應分數,並選取該演算。
  3. 如果尚未選取任何演算,請使用清單中的第一個演算。

渲染類別的分數基於以前的響應時間,以及Dispatcher嘗試的以前失敗和成功連接。 對於每次嘗試,會更新所請求URI類別的分數。

注意

如果不使用負載平衡,則可以忽略此部分。

定義統計類別

為要保留用於渲染選擇的統計資訊的每種類型的文檔定義類別。 /statistics節包含/categories節。 要定義類別,請在/categories節下添加一行,該行的格式如下:

/name { /glob "pattern"}

類別name必須是農場的唯一類別。 pattern設計全局屬性的模式部分中有說明。

要確定URI的類別,Dispatcher會將URI與每個類別模式進行比較,直到找到匹配項。 Dispatcher從清單中的第一個類別開始,並按順序繼續。 因此,請先放置具有更具體模式的類別。

例如,預設dispatcher.any檔案的Dispatcher定義了HTML類別和其它類別。 HTML類別更具體,因此會先顯示:

/statistics
  {
  /categories
    {
      /html { /glob "*.html" }
      /others  { /glob "*" }
    }
  }

下列範例也包含搜尋頁面的類別:

/statistics
  {
  /categories
    {
      /search { /glob "*search.html" }
      /html { /glob "*.html" }
      /others  { /glob "*" }
    }
  }

反映Dispatcher Statistics中的伺服器不可用

/unavailablePenalty屬性設定當與渲染器的連接失敗時,應用到渲染統計資訊的時間(以十分之一秒為單位)。 Dispatcher將時間添加到與請求的URI匹配的統計資訊類別。

例如,當無法建立指定主機名稱/埠的TCP/IP連線時,會套用此懲罰,因為AEM未執行(且未監聽),或因為網路相關問題。

/unavailablePenalty屬性是/farm節的直接子項(/statistics節的同級項)。

如果不存在/unavailablePenalty屬性,則使用"1"值。

/unavailablePenalty "1"

識別嚴格連線資料夾- /stickyConnectionsFor

/stickyConnectionsFor屬性定義一個包含自黏檔案的檔案夾;這將使用URL加以存取。 Dispatcher會從單一使用者將位於此資料夾中的所有請求傳送至相同的演算例項。 嚴格連線可確保所有檔案都有一致的作業資料。 此機制使用renderid Cookie。

以下範例定義與/products資料夾的嚴格連線:

/stickyConnectionsFor "/products"

當頁面由來自多個內容節點的內容組成時,請包含/paths屬性,該屬性列出內容的路徑。 例如,頁面包含/content/image/content/video/var/files/pdfs的內容。 下列設定可啟用頁面上所有內容的嚴格連線:

/stickyConnections {
  /paths {
    "/content/image"
    "/content/video"
    "/var/files/pdfs"
  }
}

httpOnly

啟用自黏連線時,分派程式模組會設定renderid Cookie。 此Cookie沒有httponly標幟,應加入此標幟以增強安全性。 通過在dispatcher.any配置檔案的/stickyConnections節點中設定httpOnly屬性,可以執行此操作。 屬性的值(01)定義renderid Cookie是否附加了HttpOnly屬性。 預設值為0,表示不會新增屬性。

有關httponly標誌的其他資訊,請閱讀此頁

安全

啟用自黏連線時,分派程式模組會設定renderid Cookie。 此Cookie沒有secure標幟,應加入此標幟以增強安全性。 通過在dispatcher.any配置檔案的/stickyConnections節點中設定secure屬性,可以執行此操作。 屬性的值(01)定義renderid Cookie是否附加了secure屬性。 預設值為0,這表示如果傳入請求安全,則將添加​屬性。​如果值設定為1,則無論傳入請求是否安全,都將添加安全標誌。

處理渲染連接錯誤

當演算伺服器傳回500錯誤或無法使用時,設定Dispatcher行為。

指定運行狀況檢查頁

使用/health_check屬性來指定當發生500個狀態代碼時被檢查的URL。 如果此頁還返回500狀態代碼,則該實例被認為不可用,並且在重試之前將可配置的時間補償(/unavailablePenalty)應用於渲染。

/health_check
  {
  # Page gets contacted when an instance returns a 500
  /url "/health_check.html"
  }

指定頁面重試延遲

/retryDelay屬性設定Dispatcher在群呈現的連接嘗試輪次之間等待的時間(以秒為單位)。 對於每輪,Dispatcher嘗試連接到渲染器的最大次數是場中的渲染次數。

如果未明確定義/retryDelay,則Dispatcher使用"1"值。 在大多數情況下,預設值都適合。

/retryDelay "1"

配置重試次數

/numberOfRetries屬性設定Dispatcher在轉譯時執行的連接嘗試的最大輪數。 如果Dispatcher在此次重試次數後無法成功連接到渲染器,Dispatcher將返回失敗的響應。

對於每輪,Dispatcher嘗試連接到渲染器的最大次數是場中的渲染次數。 因此,Dispatcher嘗試連接的最大次數是(/numberOfRetries)x(渲染次數)。

如果未明確定義該值,則預設值為5

/numberOfRetries "5"

使用故障切換機制

啟用Dispatcher群上的故障切換機制,在原始請求失敗時將請求重新發送到不同的呈現。 啟用故障切換後,Dispatcher具有以下行為:

  • 當對演算的請求傳回HTTP狀態503(UNAVAILABLE)時,Dispatcher會將請求傳送至不同的演算。
  • 當對演算的請求傳回HTTP狀態50x(503除外)時,Dispatcher會傳送為health_check屬性所設定之頁面的請求。
    • 如果運行狀況檢查返回500(INTERNAL_SERVER_ERROR),Dispatcher會將原始請求發送到不同的渲染器。
    • 如果Healtch檢查返回HTTP狀態200,Dispatcher會將初始HTTP 500錯誤返回給客戶端。

要啟用故障切換,請將以下行添加到群(或網站):

/failover "1"
注意

要重試包含內文的HTTP請求,Dispatcher會在假設實際內容之前,將Expect: 100-continue請求標頭髮送到渲染器。 含CQSE的CQ 5.5會立即回答100(繼續)或錯誤碼。 其他servlet容器也應支援此功能。

正在忽略中斷錯誤- /ignoreEINTR

注意

通常不需要此選項。 只有在您看到下列日誌消息時,才需要使用此選項:

Error while reading response: Interrupted system call

如果系統調用的對象位於通過NFS訪問的遠程系統上,則任何面向檔案系統的系統調用都可能被中斷EINTR。 這些系統呼叫是否可逾時或中斷,取決於本機機器上安裝基礎檔案系統的方式。

如果實例具有此類配置且日誌包含以下消息,請使用/ignoreEINTR參數:

Error while reading response: Interrupted system call

在內部,Dispatcher使用可表示為:

while (response not finished) {  
read more data  
}

EINTR出現在" read more data"部分中時,可以生成這樣的消息,其原因是在接收到任何資料之前接收到信號。

要忽略此類中斷,可將以下參數添加到dispatcher.any/farms之前):

/ignoreEINTR "1"

/ignoreEINTR設定為"1"會導致Dispatcher繼續嘗試讀取資料,直到讀取完整響應。 預設值為0,並停用選項。

設計全局屬性的模式

Dispatcher配置檔案中的幾個部分使用glob屬性作為客戶端請求的選擇標準。 glob屬性的值是Dispatcher與請求的一個方面進行比較的模式,如所請求資源的路徑或客戶機的IP地址。 例如,/filter節中的項使用glob模式來標識Dispatcher所操作或拒絕的頁的路徑。

glob值可包含通配符和字母數字字元以定義模式。

萬用字元 說明 範例
* 相符項目:字串中任何字元的零個或多個連續例項。 符合的最終字元由下列任一情況決定:字串中的
字元與模式中的下一個字元相符,而模式字元具有下列特性:
  • 不是*
  • 不是?
  • 常值字元(包括空格)或字元類別。
  • 到達模式的結尾。
在字元類中,字元將逐字解釋。
*/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"
^ 否定後面的字元或字元範圍。 僅用於否定字元類內的字元和字元範圍。 等效於!通配符。
在字元類之外,將逐字解釋該字元。
!萬用字元的範例會套用,以^字元取代範例模式中的!字元。

記錄

在Web伺服器配置中,可以設定:

  • Dispatcher日誌檔案的位置。
  • 日誌級別。

有關詳細資訊,請參閱Web伺服器文檔和Dispatcher實例的自述檔案。

Apache已旋轉/管道記錄檔

如果使用​Apache Web伺服器,則可以對旋轉和/或管道日誌使用標準功能。 例如,使用管道日誌:

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 Web伺服器文檔;例如Apache 2.4

注意

在安裝時,預設日誌級別為高(即級別3 =調試),因此Dispatcher會記錄所有錯誤和警告。 這在初期階段非常有用。

但是,這需要額外的資源,因此,當Dispatcher根據您的要求​正常工作時,您可以(應該)降低日誌級別。

跟蹤記錄

除了Dispatcher的其他增強功能外,4.2.0版還引入了跟蹤記錄。

這比「除錯」記錄檔更高,在記錄檔中顯示其他資訊。 它新增了下列項目的記錄:

  • 轉發標題的值;
  • 套用至特定動作的規則。

通過將Web伺服器中的日誌級別設定為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

確認基本操作

若要確認Web伺服器、Dispatcher和AEM例項的基本操作與互動,您可使用下列步驟:

  1. loglevel設為3

  2. 啟動Web伺服器;這也會啟動Dispatcher。

  3. 啟動AEM例項。

  4. 檢查Web伺服器和Dispatcher的日誌和錯誤檔案。

    • 視您的網頁伺服器而定,您應該會看到如下訊息:
      • [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上的Web伺服器會使用下列兩種方式存取網站主控台:

    • 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以可讀形式包含此資訊。 您可以使用這些回應標題來除錯與Dispatcher快取的回應相關的問題。

預設情況下,此功能未啟用,因此,為了包括響應標題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/wknd/us/en.html

以下是包含X-Dispatcher-Info將傳回之回應標題的清單:

  • 快取
    目標檔案包含在快取中,調度程式已確定傳送該檔案是有效的。
  • 快取
    目標檔案不包含在快取中,而調度程式已確定快取輸出並傳送輸出是有效的。
  • 快取:stat檔案較新。
    目標檔案包含在快取中,但是,它被較新的stat檔案使其失效。調度程式將刪除目標檔案,從輸出中重新建立併發送該檔案。
  • 無法進行快取:no document
    root農場的組態不包含document root(configuration element)
    cache.docroot)。
  • 無法進行快取:快取檔案路徑過長
    目標檔案——文檔根檔案和URL檔案的串連——超過系統上最長的檔案名。
  • 無法進行快取:臨時檔案路徑過長
    臨時檔案名模板超過系統上可能的最長檔案名。 調度程式首先建立臨時檔案,然後實際建立或覆蓋快取檔案。 臨時檔案名是目標檔案名,其中附加了字元_YYYYXXXXXX,將替換YX以建立唯一名稱。
  • 無法進行快取:請求URL沒有副檔名
    請求URL沒有副檔名,或是檔案副檔名後面有路徑,例如:/test.html/a/path
  • 無法進行快取:請求不是GET或
    HEAD HTTP方法既不是GET也不是HEAD。調度程式假定輸出將包含不應被快取的動態資料。
  • 無法進行快取:包含查詢字串的請求
    請求包含查詢字串。 調度器假定輸出取決於給定的查詢字串,因此不進行快取。
  • 無法進行快取:會話管理器未驗證
    群的快取由會話管理器管理(配置包含sessionmanagement節點),而請求不包含相應的驗證資訊。
  • 無法進行快取:請求包含授權
    群不允許快取輸出(allowAuthorized 0),請求包含驗證資訊。
  • 無法進行快取:target是目錄
    目標檔案是目錄。 這可能會指出某些概念性錯誤,其中URL和某些子URL都包含可快取的輸出,例如,如果/test.html/a/file.ext的請求首先包含可快取的輸出,則調度程式將無法將後續請求的輸出快取到/test.html
  • 無法進行快取:請求URL有尾隨斜線
    請求URL有尾隨斜線。
  • 無法進行快取:請求URL不在快取規則中
    群的快取規則會明確拒絕快取某些請求URL的輸出。
  • 無法進行快取:授權驗證器拒絕訪問
    農場的授權檢查程式拒絕存取快取檔案。
  • 無法進行快取:session not
    valid農場的快取由session manager(configuration contains a sessionmanagement node)管理,且使用者的session is not or not extenary.
  • 無法進行快取:響應包no_cache
    含遠程伺服器返回
    Dispatcher: no_cache 標題,禁止調度程式快取輸出。
  • 無法進行快取:響應內容長
    度為零響應內容長度為零;調度程式將不建立零長度檔案。

本頁內容