由于缺少ServerAlias或X-Vhost配置,Dispatcher配置部署失败

Cloud Manager中的Dispatcher配置部署在代码扫描或TestCacheInvalidation阶段失败,即使本地验证报告没有问题。 当没有启用的vhost与Cloud Manager用于其内部测试的主机名相匹配,或者匹配的vhost未设置X-Vhost标头,因此请求属于catch-all 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符号链接、缺少必需的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的符号链接。 例如:default.vhost -> ../available_vhosts/default.vhost。 如果缺少符号链接,请添加该符号链接并推送承诺。
​3. 设置X-Vhost标头。 在匹配的vhost中添加:


标头添加X-Vhost“publish”


然后,测试请求会返回一个非catch-all的X-Vhost值。 确认不重写规则会删除响应标头。
​4. 检查阻止invalidate.cache的重写规则。 搜索拒绝Cloud Manager测试客户端的规则。 例如:与Go-http-client用户代理匹配的规则返回403:


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