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