HTTPDNS
HTTPDNS 通过 HTTP 接口对外提供域名解析服务,具有域名防劫持、精准调度、实时解析生效等特性。
启用 HTTPDNS
在
全局配置/DNS页面启用 DNS:

在
全局配置/配置分区端口页面添加分区端口,类型选择HTTPDNS:
在
应用页面添加HTTP/HTTPS应用:
在应用内添加
上游,上游选择 node 节点的环回地址,端口输入上面步骤添加的HTTPDNS分区端口:
在应用内添加
页面规则:- 设置 HTTP 头部,使 HTTPDNS 能正确获取客户端 IP 。选择
动作,添加动作设置代理头,报头填写X-Real-IP,值设置为内置变量-客户端地址:
- 选择
代理,上游选择上一步添加的上游:
- 设置 HTTP 头部,使 HTTPDNS 能正确获取客户端 IP 。选择
至此,HTTPDNS 配置已经完成,在 DNS 中添加 DNS 应用及记录,即可使用 HTTPDNS 进行查询。
HTTPDNS 查询
请求 URL:http://{your app}/?host={your domain}&query=4,6&ip={client ip}
请求方法:GET
请求参数:
| 名称 | 必选 | 描述 |
|---|---|---|
| host | 是 | 要解析的域名。 |
| ip | 否 | 用户的来源 IP,如果没指定这个参数,默认使用请求连接的源 IP 。 |
| query | 否 | 指定解析结果 IP 的类型,可以选择 6(IPv6) 或 4(IPv4)。默认为 4 。 |
| type | 否 | 指定查询结果的格式,当前仅支持“json”。 |
请求返回:
| 名称 | 描述 |
|---|---|
| host | 查询的域名。 |
| ips | 该域名的 IPv4 解析结果,是一个列表,可能包括 0 个、 1 个或多个 IP 地址。 |
| ipsv6 | 该域名的 IPv6 解析结果,是一个列表,可能包括 0 个、 1 个或多个 IP 地址。 |
| ttl | 该域名解析结果的 TTL 缓存时间。 |
| origin_ttl | 域名原始 TTL,即权威 NS 上配置的域名 TTL 值。 |
请求错误码:
| 错误码 | HTTP状态码 | 描述 |
|---|---|---|
| MethodNotAllowed | 405 | 不允许的 HTTP 请求方法。 |
| MissingArgument | 400 | 缺少查询参数,如 host 。 |
| UnsupportedType | 400 | URL 参数 type 指定了不支持的类型。 |
| InvalidHost | 400 | URL 参数 host 指定的域名不合法。 |
| InvalidIP | 400 | URL 参数 IP 指定的客户 IP 不合法。 |
| InvalidQuery | 400 | URL 参数 query 指定的 IP 版本不合法。 |
| InternalError | 500 | 服务器内部错误。 |
| QueryError | 500 | 域名查询错误。 |
查询示例
单结果查询示例:仅指定单个 host 及单个 IP,则为单结果查询。
- 请求示例 1:
http://www.test.com:80/?host=www.a.com - 请求示例 2:
http://www.test.com:80/?host=www.a.com&ip=1.2.3.4 - 请求示例 3:
http://www.test.com:80/?host=www.a.com&ip=1.2.3.4&query=6 - 请求示例 4:
http://www.test.com:80/?host=www.a.com&ip=1.2.3.4&query=4,6
结果示例:
{
"client_ip": "1.2.3.4",
"ips": ["127.0.0.1"],
"host": "www.a.com",
"ttl": 300,
"origin_ttl": 300
}
多结果查询示例:指定了多个 host 或多个 IP,则为多结果查询。
- 请求示例 1:
http://www.test.com:80/?host=www.a.com,www.b.com - 请求示例 2:
http://www.test.com:80/?host=www.a.com&ip=1.1.1.1,2.2.2.2&query=4,6 - 请求示例 3:
http://www.test.com:80/?host=www.a.com,www.b.com&ip=1.1.1.1,2.2.2.2&query=4,6 - 请求示例 4:
http://www.test.com:80/?host=www.a.com,www.b.com&ip=1.1.1.1&query=4,6
结果示例:
{
"dns": [{
"client_ip": "1.1.1.1",
"ipsv6": {},
"host": "www.a.com",
"ttl": 300,
"ips": {}
}, {
"client_ip": "2.2.2.2",
"ipsv6": {},
"host": "www.a.com",
"ttl": 300,
"ips": {}
}]
}