HTTPDNS

HTTPDNS 透過 HTTP 介面對外提供域名解析服務,具有域名防劫持、精準排程、實時解析生效等特性。

啟用 HTTPDNS

  • 全域性配置/DNS頁面啟用 DNS:

  • 全域性配置/配置分割槽埠頁面新增分割槽埠,型別選擇 HTTPDNS

  • 應用 頁面新增 HTTP/HTTPS 應用:

  • 在應用內新增 上游,上游選擇 node 節點的環回地址,埠輸入上面步驟新增的 HTTPDNS 分割槽埠:

  • 在應用內新增 頁面規則:

    • 設定 HTTP 頭部,使 HTTPDNS 能正確獲取客戶端 IP 。選擇 動作,新增動作 設定代理頭,報頭填寫 X-Real-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狀態碼描述
MethodNotAllowed405不允許的 HTTP 請求方法。
MissingArgument400缺少查詢引數,如 host 。
UnsupportedType400URL 引數 type 指定了不支援的型別。
InvalidHost400URL 引數 host 指定的域名不合法。
InvalidIP400URL 引數 IP 指定的客戶 IP 不合法。
InvalidQuery400URL 引數 query 指定的 IP 版本不合法。
InternalError500伺服器內部錯誤。
QueryError500域名查詢錯誤。

查詢示例

單結果查詢示例:僅指定單個 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": {}
    }]
}