用途
本技能用于诊断 CDN 回源失败、源站不可达以及其他与源站相关的问题。它通过 hcloud CLI 读取 CDN 域名的源站配置,并对源站进行连通性探测,帮助定位回源失败的根因,例如源站服务异常、端口未开放,或 CDN 回源 IP 段未被加入白名单。
主要能力
- 通过 ShowDomainFullConfig/v2 自动查询并解析 CDN 域名的源站配置(configs.sources 与 origin_protocol),提取 origin_addr、origin_type、http_port、https_port、origin_protocol。
- 支持 http、https、follow 三种回源协议的连通性探测;当协议为 follow 时,会同时探测 http 与 https。
- 探测脚本 scripts/origin_probe.py 输出 JSON 结构,外层包含 result、data、error_msg,data 内含 scheme、host、port、connected、http_status、is_private_address、duration_ms、error 等字段;探测超时为 10 秒。
- 生成结构化诊断报告,包含 IP 白名单提示与修复建议。
使用方式
前置条件:hcloud(KooCLI)版本不低于 3.2.0;Python 不低于 3.8;Python 库 requests 不低于 2.25;已配置 hcloud 凭证。
关键命令示例:
hcloud configure list hcloud CDN ShowDomainDetailByName --cli-region=<region> --domain_name=<domain> hcloud CDN ShowDomainFullConfig/v2 --cli-region=<region> --domain_name=<domain> python scripts/origin_probe.py --scheme http --host <origin_addr> --port <http_port> python scripts/origin_probe.py --scheme https --host <origin_addr> --port <https_port>
所有参数须使用 --key=value 形式,不支持空格分隔。CDN API 仅支持 cn-north-1(北京)与 ap-southeast-1(新加坡)两个区域,建议使用 cn-north-1。执行诊断前必须由用户明确提供目标域名,不能猜测或自动选取域名;仅在用户不知道域名或要求查询时,才通过 ListDomains/v2 列出账号下域名供选择。
流程概要:检查凭证并用 ShowDomainDetailByName 验证域名归属;查询源站配置,若 configs.sources 为空则报告“源站未配置”并跳过探测;按 origin_protocol 选择协议执行探测;汇总结果生成诊断报告。整体耗时估计少于 15 秒。
安全与限制
该技能严格只读,禁止全部非 GET 操作,共 55 项(24 个 POST、25 个 PUT、6 个 DELETE),包括创建/删除域名、修改域名或源站配置、启停域名、修改计费模式、创建刷新/预热任务等。若用户请求此类操作,应拒绝并引导使用华为云 CDN 控制台或手动运行 hcloud CLI。技能不会读取、回显或打印 AK/SK,也不接受用户在对话中直接提供 AK/SK;凭证只能来自环境变量或已配置的 CLI 配置文件,推荐使用 hcloud configure 进行交互式配置。
其他限制:探测结果仅代表执行环境的网络视角,不代表 CDN 边缘节点的回源路径;脚本不会绕过 HTTPS 证书校验;源站探测会向源站发送 HTTP/HTTPS 请求(优先 HEAD,遇 405 回退 GET),只读且无副作用。所需最小 IAM 权限为 cdn::query 以及 cdn:configuration:queryDomains。CDN API 仅支持前述两个区域。
适用场景
诊断回源失败、源站不可达、源站响应异常、源站持续返回 502 或回源超时、回源路径 TLS 握手失败,以及核对源站配置与源站连通性。不适用于修改配置、缓存刷新/预热、域名生命周期与计费管理、查询流量统计或访问日志,以及 CDN 回源路径之外的通用网络连通性测试。
常见错误处理:401 表示 AK/SK 无效或过期,需重新配置;403 表示权限不足,需授予查询权限;404 或 CDN.0171 表示域名不存在或不属于当前账号;connect_timeout 表示 TCP 连接超过 10 秒预算;connect_failed 表示连接被拒绝、网络不可达或 DNS 解析失败;tls_handshake_failed 表示 TCP 可达但 HTTPS 证书异常;missing_library 表示缺少 requests 库。