Dispatcher設定部署因缺少ServerAlias或X-Vhost設定而失敗

Cloud Manager中的Dispatcher設定部署在程式碼掃描或TestCacheInvalidation階段失敗,即使本機驗證報告沒有問題。 若未啟用的vhost符合Cloud Manager用於其內部測試的主機名稱,或相符的vhost未設定X-Vhost標頭,因此請求會落入全能型vhost時,就會發生失敗。 遺失default.vhost個符號連結、遺失ServerAlias值,以及重寫封鎖invalidate.cache產生相同結果的規則。 確保至少有一個啟用的vhost處理127.0.0.1localhost*.local和雲端網域並設定X-Vhost標頭可解決失敗。

說明 description

問題: Dispatcher部署在程式碼掃描時失敗,或出現TestCacheInvalidation的X-Vhost擷取所有錯誤

說明

Cloud Manager Dispatcher管道在程式碼掃描或TestCacheInvalidation失敗,儘管Dispatcher驗證器報告​找不到問題。 記錄檔顯示驗證器成功執行,接著失敗(例如Expected header X-Vhost to be existing and not: catch-all, got: catch-all)或失效並傳回HTTP 403。 當沒有啟用的vhost符合Dispatcher失效主機名稱或未設定X-Vhost標頭,導致Cloud Manager測試落入全能型vhost時,就會發生此情況。 遺失default.vhost symlink、缺少必要的ServerAlias值或重新導向/重寫規則區塊invalidate.cache時,會發生其他失敗。

環境:

  • Adobe Experience Manager as a Cloud Service (AEMaaCS)
  • AEM Managed Services
  • Cloud Manager (程式碼掃描和Web層驗證管道)
  • Dispatcher

問題/症狀:

  • Dispatcher測試失敗訊息: Test fails. Expected header X-Vhost to be existing and not: catch-all, got: catch-all
  • 管道無法掃描程式碼,即使Dispatcher驗證器列印​找不到問題
  • Dispatcher失效測試傳回invalidate.cache.的POST的Expected 200 but got 403
  • Cloud Manager記錄檔顯示錯誤代碼BUILD_WEB_TIER_VALIDATE_WITH_DISPATCHER_TEST_FAILUREBUILD_WEB_TIER_VALIDATE_STATIC_TEST_FAILURE.

根本原因:

Cloud Manager執行的內部Dispatcher測試需要至少一個啟用的vhost來比對來自127.0.0.1localhost*.local*.adobeaemcloud.com*.adobeaemcloud.net的請求。 這些測試也必須傳回X-Vhost標頭。 若這些主機名稱與任何啟用的vhost不相符,或相符的vhost未設定X-Vhost,Cloud Manager會將回應視為全包式,導致TestCacheInvalidation和其他測試失敗。 在複製步驟中遺失default.vhost符號連結、自訂重寫規則區塊失效或遺失成品時,也會發生相同的失敗。

如何確認

  1. 導覽至Cloud Manager >管道,選取失敗的管道,然後選擇檢視執行。 下載build_dispatcher_validation.logdispatcher_backend_mock.log
  2. 搜尋TestCacheInvalidationX-Vhost的記錄檔。 失敗顯示訊息,例如Expected header X-Vhost ... got catch-all
  3. 如果未出現失敗,則管道可能會重複使用先前的建置。 執行虛擬Git認可以強制重建並重新檢查。

解決方法 resolution

  1. 確認必要的ServerAlias值存在。 開啟使用中網域的conf.d/available_vhosts/*.vhost,並確認至少有一個啟用的vhost明確包含所有這些別名:

    code language-none
    ServerAlias "127.0.0.1" "localhost" "*.local" "*.adobeaemcloud.com" "*.adobeaemcloud.net"
    

無法保證只有glob *才能運作。 如果缺少別名,請新增別名並重新部署。
​2. 確認是否已啟用vhost。 檢查conf.d/enabled_vhosts/是否有指向具有必要ServerAlias專案之vhost的symlink。 例如: default.vhost -> ../available_vhosts/default.vhost。 如果缺少符號連結,請新增該連結並推送認可。
​3. 設定X-Vhost標頭。 在相符的vhost中,新增:


標頭新增X-Vhost “publish”

測試請求接著會傳回X-Vhost值,而不是catch-all。 確認沒有重寫規則會移除回應標題。
​4. 檢查封鎖invalidate.cache的重寫規則。 搜尋拒絕Cloud Manager測試使用者端的規則。 例如:符合傳回403的Go-http-client使用者代理程式的規則:

``
RewriteCond %{HTTP_USER_AGENT} Go-http-client.$
RewriteRule .
- [ R=403,L]
``

移除或略過違規規則,讓失效返回HTTP 200。 如有需要,請暫時停用可疑的重新寫入,然後重新部署。
​5. 在本機驗證設定:

`’
./bin/validate.sh dispatcher/src
`’

確認輸出顯示​ 找不到問題 ​且​語法正常。 在重新部署之前,請修正任何本機語法錯誤。
​6. 提交變更並重新執行Dispatcher管道。 確認程式碼掃描及TestCacheInvalidation通過。

驗證

  1. 確認最新的Cloud Manager管道通過了程式碼掃描且沒有TestCacheInvalidation錯誤。
  2. 透過記錄檔確認Dispatcher失效未顯示invalidate.cache的HTTP 403回應。

相關閱讀

recommendation-more-help
experience-cloud-kcs-help-kbarticles