Dispatcher設定部署因缺少ServerAlias或X-Vhost設定而失敗
Cloud Manager中的Dispatcher設定部署在程式碼掃描或TestCacheInvalidation階段失敗,即使本機驗證報告沒有問題。 若未啟用的vhost符合Cloud Manager用於其內部測試的主機名稱,或相符的vhost未設定X-Vhost標頭,因此請求會落入全能型vhost時,就會發生失敗。 遺失default.vhost個符號連結、遺失ServerAlias值,以及重寫封鎖invalidate.cache產生相同結果的規則。 確保至少有一個啟用的vhost處理127.0.0.1、localhost、*.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_FAILURE或BUILD_WEB_TIER_VALIDATE_STATIC_TEST_FAILURE.
根本原因:
Cloud Manager執行的內部Dispatcher測試需要至少一個啟用的vhost來比對來自127.0.0.1、localhost、*.local、*.adobeaemcloud.com和*.adobeaemcloud.net的請求。 這些測試也必須傳回X-Vhost標頭。 若這些主機名稱與任何啟用的vhost不相符,或相符的vhost未設定X-Vhost,Cloud Manager會將回應視為全包式,導致TestCacheInvalidation和其他測試失敗。 在複製步驟中遺失default.vhost符號連結、自訂重寫規則區塊失效或遺失成品時,也會發生相同的失敗。
如何確認
- 導覽至Cloud Manager
>管道,選取失敗的管道,然後選擇檢視執行。 下載build_dispatcher_validation.log和dispatcher_backend_mock.log。 - 搜尋
TestCacheInvalidation或X-Vhost的記錄檔。 失敗顯示訊息,例如Expected header X-Vhost ... got catch-all。 - 如果未出現失敗,則管道可能會重複使用先前的建置。 執行虛擬Git認可以強制重建並重新檢查。
解決方法 resolution
-
確認必要的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通過。
驗證
- 確認最新的Cloud Manager管道通過了程式碼掃描且沒有
TestCacheInvalidation錯誤。 - 透過記錄檔確認Dispatcher失效未顯示
invalidate.cache的HTTP 403回應。