由于缺少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.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符号链接、缺少必需的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的符号链接。 例如: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通过。
验证
- 确认最新的Cloud Manager管道通过了代码扫描,并且没有
TestCacheInvalidation错误。 - 通过日志确认Dispatcher失效未显示
invalidate.cache的HTTP 403响应。