optimize: DNS相关代码细节优化。

pull/384/head
王良 2024-10-21 15:04:02 +08:00
parent c88332755d
commit 9fc844e939
3 changed files with 18 additions and 17 deletions

View File

@ -20,6 +20,7 @@ module.exports = {
// 设置DNS名称到name属性中
dnsMap[provider].name = provider
dnsMap[provider].type = conf.type
}
return dnsMap
},
@ -27,17 +28,20 @@ module.exports = {
let providerName = matchUtil.matchHostname(dnsConfig.mapping, hostname, 'get dns providerName')
// usa已重命名为cloudflare以下为向下兼容处理
if (providerName === 'usa') {
if (providerName === 'usa' && dnsConfig.providers[providerName] == null) {
providerName = 'cloudflare'
}
// 如果为空尝试从预设IP中匹配如果配置过预设IP则随便
if (providerName == null) {
if (providerName == null || dnsConfig.providers[providerName] == null) {
const hostnamePreSetIpList = matchUtil.matchHostname(dnsConfig.preSetIpList, hostname, 'matched preSetIpList')
if (hostnamePreSetIpList) {
for (const name in dnsConfig.providers) {
log.debug(`当前域名未配置过DNS但配置了预设IP现返回DNS '${name}' 作为预设IP的使用工具hostname: ${hostname}, preSetIpList:`, hostnamePreSetIpList)
return dnsConfig.providers[name]
const provider = dnsConfig.providers[name]
if (provider.type === 'https') {
log.debug(`当前域名未配置过DNS但配置了预设IP现返回DNS '${name}' 作为预设IP的使用工具hostname: ${hostname}, preSetIpList:`, hostnamePreSetIpList)
return dnsConfig.providers[name]
}
}
}
}

View File

@ -120,6 +120,9 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e
}
if (dns) {
rOptions.lookup = dnsLookup.createLookupFunc(res, dns, 'request url', url, isDnsIntercept)
log.debug(`域名 ${rOptions.hostname} DNS: ${dns.name}`)
} else {
log.debug(`域名 ${rOptions.hostname} 在dns中未配置`)
}
}

View File

@ -26,11 +26,11 @@ function domainRegexply (target) {
}
function domainMapRegexply (hostMap) {
if (hostMap == null) {
return { origin: {} }
}
const regexpMap = {}
const origin = {} // 用于快速匹配见matchHostname、matchHostnameAll方法
if (hostMap == null) {
return regexpMap
}
lodash.each(hostMap, (value, domain) => {
if (domain.indexOf('*') >= 0 || domain[0] === '^') {
const regDomain = domain[0] !== '^' ? domainRegexply(domain) : domain
@ -127,8 +127,8 @@ function matchHostnameAll (hostMap, hostname, action) {
let value
// 通配符匹配 或 正则表达式匹配优先级1最低
for (const target in hostMap) {
if (target === 'origin') {
for (const regexp in hostMap) {
if (regexp === 'origin') {
continue
}
@ -136,16 +136,10 @@ function matchHostnameAll (hostMap, hostname, action) {
// continue // 不是通配符匹配串,也不是正则表达式,跳过
// }
// 如果是通配符匹配串,转换为正则表达式
let regexp = target
// if (target[0] !== '^') {
// regexp = domainRegexply(regexp)
// }
// 正则表达式匹配
if (hostname.match(regexp)) {
value = hostMap[target]
log.debug(`matchHostname-one: ${action}: '${hostname}' -> { "${target}": ${JSON.stringify(value)} }`)
value = hostMap[regexp]
log.debug(`matchHostname-one: ${action}: '${hostname}' -> { "${regexp}": ${JSON.stringify(value)} }`)
values = merge(values, value)
}
}