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": {}
}]
}