You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerDNS API创建DNS区域失败(422错误)求助

解决PowerDNS API创建区域返回422 Unprocessable Entity的问题

第一步:查看具体错误详情

你的代码未打印API返回的具体错误内容,先添加echo $result;语句,查看响应的JSON错误信息——422错误通常会附带明确的问题描述,比如后端不支持的区域类型、权限不足等,这是快速定位问题的关键。

核心问题:BIND后端不支持Native类型区域

从你的pdns.conf能看到使用的是launch=bind(BIND后端),而PowerDNS的BIND后端不支持Native类型的区域,仅支持Master或Slave类型,这是导致422错误的最可能原因。

修正请求参数

将POST数据中的"kind":"Native"改为"kind":"Master":

curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"name\":\"example.com.\", \"kind\":\"Master\", \"masters\": [], \"nameservers\":[\"ns1.example.com.\", \"ns2.example.com.\"]}");

额外检查项

  1. BIND配置与权限验证

    • 确保named用户(pdns.conf中setuid=named)对BIND区域文件所在目录有写入权限,PowerDNS需要创建新的区域文件
    • 检查/etc/named.conf是否允许添加新区域,部分环境可能需要配置allow-new-zones yes;(取决于BIND版本)
  2. 用curl命令直接测试
    绕过PHP代码,用curl命令直接验证API请求是否正常:

    curl -X POST \
      -H "X-Api-Key: MY-KEY" \
      -H "Content-Type: application/json" \
      http://127.0.0.1:953/api/v1/servers/localhost/zones \
      -d '{"name":"example.com.", "kind":"Master", "masters": [], "nameservers":["ns1.example.com.", "ns2.example.com."]}'
    

内容的提问来源于stack exchange,提问作者Emin4ik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:05:21