optimize: DNS相关代码细节优化。
parent
c88332755d
commit
9fc844e939
|
@ -20,6 +20,7 @@ module.exports = {
|
||||||
|
|
||||||
// 设置DNS名称到name属性中
|
// 设置DNS名称到name属性中
|
||||||
dnsMap[provider].name = provider
|
dnsMap[provider].name = provider
|
||||||
|
dnsMap[provider].type = conf.type
|
||||||
}
|
}
|
||||||
return dnsMap
|
return dnsMap
|
||||||
},
|
},
|
||||||
|
@ -27,17 +28,20 @@ module.exports = {
|
||||||
let providerName = matchUtil.matchHostname(dnsConfig.mapping, hostname, 'get dns providerName')
|
let providerName = matchUtil.matchHostname(dnsConfig.mapping, hostname, 'get dns providerName')
|
||||||
|
|
||||||
// usa已重命名为cloudflare,以下为向下兼容处理
|
// usa已重命名为cloudflare,以下为向下兼容处理
|
||||||
if (providerName === 'usa') {
|
if (providerName === 'usa' && dnsConfig.providers[providerName] == null) {
|
||||||
providerName = 'cloudflare'
|
providerName = 'cloudflare'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果为空,尝试从预设IP中匹配,如果配置过预设IP,则随便
|
// 如果为空,尝试从预设IP中匹配,如果配置过预设IP,则随便
|
||||||
if (providerName == null) {
|
if (providerName == null || dnsConfig.providers[providerName] == null) {
|
||||||
const hostnamePreSetIpList = matchUtil.matchHostname(dnsConfig.preSetIpList, hostname, 'matched preSetIpList')
|
const hostnamePreSetIpList = matchUtil.matchHostname(dnsConfig.preSetIpList, hostname, 'matched preSetIpList')
|
||||||
if (hostnamePreSetIpList) {
|
if (hostnamePreSetIpList) {
|
||||||
for (const name in dnsConfig.providers) {
|
for (const name in dnsConfig.providers) {
|
||||||
log.debug(`当前域名未配置过DNS,但配置了预设IP,现返回DNS '${name}' 作为预设IP的使用工具,hostname: ${hostname}, preSetIpList:`, hostnamePreSetIpList)
|
const provider = dnsConfig.providers[name]
|
||||||
return dnsConfig.providers[name]
|
if (provider.type === 'https') {
|
||||||
|
log.debug(`当前域名未配置过DNS,但配置了预设IP,现返回DNS '${name}' 作为预设IP的使用工具,hostname: ${hostname}, preSetIpList:`, hostnamePreSetIpList)
|
||||||
|
return dnsConfig.providers[name]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,6 +120,9 @@ module.exports = function createRequestHandler (createIntercepts, middlewares, e
|
||||||
}
|
}
|
||||||
if (dns) {
|
if (dns) {
|
||||||
rOptions.lookup = dnsLookup.createLookupFunc(res, dns, 'request url', url, isDnsIntercept)
|
rOptions.lookup = dnsLookup.createLookupFunc(res, dns, 'request url', url, isDnsIntercept)
|
||||||
|
log.debug(`域名 ${rOptions.hostname} DNS: ${dns.name}`)
|
||||||
|
} else {
|
||||||
|
log.debug(`域名 ${rOptions.hostname} 在dns中未配置`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,11 @@ function domainRegexply (target) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function domainMapRegexply (hostMap) {
|
function domainMapRegexply (hostMap) {
|
||||||
|
if (hostMap == null) {
|
||||||
|
return { origin: {} }
|
||||||
|
}
|
||||||
const regexpMap = {}
|
const regexpMap = {}
|
||||||
const origin = {} // 用于快速匹配,见matchHostname、matchHostnameAll方法
|
const origin = {} // 用于快速匹配,见matchHostname、matchHostnameAll方法
|
||||||
if (hostMap == null) {
|
|
||||||
return regexpMap
|
|
||||||
}
|
|
||||||
lodash.each(hostMap, (value, domain) => {
|
lodash.each(hostMap, (value, domain) => {
|
||||||
if (domain.indexOf('*') >= 0 || domain[0] === '^') {
|
if (domain.indexOf('*') >= 0 || domain[0] === '^') {
|
||||||
const regDomain = domain[0] !== '^' ? domainRegexply(domain) : domain
|
const regDomain = domain[0] !== '^' ? domainRegexply(domain) : domain
|
||||||
|
@ -127,8 +127,8 @@ function matchHostnameAll (hostMap, hostname, action) {
|
||||||
let value
|
let value
|
||||||
|
|
||||||
// 通配符匹配 或 正则表达式匹配(优先级:1,最低)
|
// 通配符匹配 或 正则表达式匹配(优先级:1,最低)
|
||||||
for (const target in hostMap) {
|
for (const regexp in hostMap) {
|
||||||
if (target === 'origin') {
|
if (regexp === 'origin') {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,16 +136,10 @@ function matchHostnameAll (hostMap, hostname, action) {
|
||||||
// continue // 不是通配符匹配串,也不是正则表达式,跳过
|
// continue // 不是通配符匹配串,也不是正则表达式,跳过
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// 如果是通配符匹配串,转换为正则表达式
|
|
||||||
let regexp = target
|
|
||||||
// if (target[0] !== '^') {
|
|
||||||
// regexp = domainRegexply(regexp)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 正则表达式匹配
|
// 正则表达式匹配
|
||||||
if (hostname.match(regexp)) {
|
if (hostname.match(regexp)) {
|
||||||
value = hostMap[target]
|
value = hostMap[regexp]
|
||||||
log.debug(`matchHostname-one: ${action}: '${hostname}' -> { "${target}": ${JSON.stringify(value)} }`)
|
log.debug(`matchHostname-one: ${action}: '${hostname}' -> { "${regexp}": ${JSON.stringify(value)} }`)
|
||||||
values = merge(values, value)
|
values = merge(values, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue