优化系统代理排除地址配置,数据格式由Array改为Object,方便远程配置添加配置。
parent
92c580c487
commit
6a83041fe0
|
@ -34,7 +34,7 @@ const ProxyPlugin = function (context) {
|
|||
log.info('关闭系统代理成功')
|
||||
return true
|
||||
} catch (err) {
|
||||
log.error('关闭系统代理失败', err)
|
||||
log.error('关闭系统代理失败:', err)
|
||||
return false
|
||||
}
|
||||
},
|
||||
|
@ -55,107 +55,186 @@ module.exports = {
|
|||
use: 'local',
|
||||
other: [],
|
||||
setEnv: false,
|
||||
excludeIpList: [
|
||||
// region 中国大陆,可直接访问,无需代理
|
||||
excludeIpList: {
|
||||
// region 常用国内可访问域名
|
||||
|
||||
// 中国大陆域名,大部分可直接访问,无需代理
|
||||
'*.cn',
|
||||
'cn.*',
|
||||
// 中国大陆
|
||||
'*.cn': true,
|
||||
'cn.*': true,
|
||||
'*china*': true,
|
||||
|
||||
// 系统之家
|
||||
'*.xitongzhijia.net': true,
|
||||
|
||||
// CSDN
|
||||
'*.csdn.net',
|
||||
'*.csdn.net': true,
|
||||
|
||||
// 百度
|
||||
'*.baidu.com',
|
||||
'*.baidu.com': true,
|
||||
'*.baiducontent.com': true,
|
||||
'*.bdimg.com': true,
|
||||
'*.bdstatic.com': true,
|
||||
'*.bdydns.com': true,
|
||||
|
||||
// 腾讯
|
||||
'*.tencent.com',
|
||||
'*.qq.com',
|
||||
'*.weixin.com',
|
||||
'*.wechat.com',
|
||||
'*.tencent.com': true,
|
||||
'*.qq.com': true,
|
||||
'*.weixin.com': true,
|
||||
'*.weixinbridge.com': true,
|
||||
'*.wechat.com': true,
|
||||
'*.idqqimg.com': true,
|
||||
'*.gtimg.com': true,
|
||||
'*.qpic.com': true,
|
||||
'*.qlogo.com': true,
|
||||
'*.myapp.com': true,
|
||||
'*.myqcloud.com': true,
|
||||
|
||||
// 阿里
|
||||
'*.alipay.com',
|
||||
'*.taobao.com',
|
||||
'*.tmall.com',
|
||||
'*.aliyun.com',
|
||||
'*.dingtalk.com', // 不排除会导致钉钉的团队文档打不开(原因未知)
|
||||
'*.aliyun.com': true,
|
||||
'*.alipay.com': true,
|
||||
'*.taobao.com': true,
|
||||
'*.tmall.com': true,
|
||||
'*.alipayobjects.com': true,
|
||||
'*.dingtalk.com': true,
|
||||
'*.mmstat.com': true,
|
||||
'*.alicdn.com': true,
|
||||
'*.hdslb.com': true,
|
||||
|
||||
// Gitee
|
||||
'gitee.com',
|
||||
'*.gitee.com',
|
||||
'*.gitee.io',
|
||||
'gitee.com': true,
|
||||
'*.gitee.com': true,
|
||||
'*.gitee.io': true,
|
||||
'*.giteeusercontent.com': true,
|
||||
|
||||
// Mozilla Firefox
|
||||
'*.mozilla.org': true,
|
||||
'*.mozilla.com': true,
|
||||
'*.mozilla.net': true,
|
||||
'*.firefox.com': true,
|
||||
'*.firefox.org': true,
|
||||
'*.mozillademos.org': true,
|
||||
'*.mozillians.org': true,
|
||||
'*.mozillians.net': true,
|
||||
'*.mozillians.com': true,
|
||||
|
||||
// OSS
|
||||
'*.sonatype.org',
|
||||
'*.sonatype.org': true,
|
||||
// Maven镜像
|
||||
'*.maven.org',
|
||||
'*.maven.org': true,
|
||||
// Maven Repository
|
||||
'*.mvnrepository.com',
|
||||
'challenges.cloudflare.com', // 在访问 mvnrepository.com 的人机校验时使用,国内可直接访问,所以不需要代理,代理了反而变慢了。
|
||||
'*.mvnrepository.com': true,
|
||||
'challenges.cloudflare.com': true, // 在访问 mvnrepository.com 的人机校验时使用,国内可直接访问,所以不需要代理,代理了反而变慢了。
|
||||
|
||||
// 苹果
|
||||
'*.apple.com',
|
||||
'*.icloud.com',
|
||||
'*.apple.com': true,
|
||||
'*.icloud.com': true,
|
||||
|
||||
// 微软
|
||||
'*.microsoft.com',
|
||||
'*.windows.com',
|
||||
'*.office.com',
|
||||
'*.office.net',
|
||||
'*.live.com',
|
||||
'*.msn.com',
|
||||
'*.microsoft.com': true,
|
||||
'*.windows.com': true,
|
||||
'*.office.com': true,
|
||||
'*.office.net': true,
|
||||
'*.live.com': true,
|
||||
'*.msn.com': true,
|
||||
|
||||
// WPS
|
||||
'*.wps.com',
|
||||
'*.wps.com': true,
|
||||
|
||||
// 奇虎
|
||||
'*.qihoo.com',
|
||||
'*.qihucdn.com',
|
||||
'*.qihoo.com': true,
|
||||
'*.qihucdn.com': true,
|
||||
// 360
|
||||
'*.360.com',
|
||||
'*.360safe.com',
|
||||
'*.360buyimg.com',
|
||||
'*.360buy.com',
|
||||
'*.360.com': true,
|
||||
'*.360safe.com': true,
|
||||
'*.360buyimg.com': true,
|
||||
'*.360buy.com': true,
|
||||
|
||||
// 京东
|
||||
'*.jd.com',
|
||||
'*.jcloud.com',
|
||||
'*.jcloudcs.com',
|
||||
'*.jcloudcache.com',
|
||||
'*.jcloudcdn.com',
|
||||
'*.jcloudlb.com',
|
||||
'*.jd.com': true,
|
||||
'*.jcloud.com': true,
|
||||
'*.jcloudcs.com': true,
|
||||
'*.jcloudcache.com': true,
|
||||
'*.jcloudcdn.com': true,
|
||||
'*.jcloudlb.com': true,
|
||||
|
||||
// 哔哩哔哩
|
||||
'*.bilibili.com': true,
|
||||
'*.bilivideo.com.com': true,
|
||||
'*.biliapi.net': true,
|
||||
|
||||
// 移动
|
||||
'*.10086.com': true,
|
||||
'*.10086cloud.com': true,
|
||||
|
||||
// 移动:139邮箱
|
||||
'*.139.com': true,
|
||||
|
||||
// 迅雷
|
||||
'*.xunlei.com': true,
|
||||
|
||||
// 网站ICP备案查询
|
||||
'*.icpapi.com': true,
|
||||
|
||||
// AGE动漫
|
||||
'*.agedm.*': true,
|
||||
'*.zhimg.com': true,
|
||||
'*.bdxiguaimg.com': true,
|
||||
'*.toutiaoimg.com': true,
|
||||
'*.bytecdntp.com': true,
|
||||
'*.bytegoofy.com': true,
|
||||
'*.toutiao.com': true,
|
||||
'*.toutiaovod.com': true,
|
||||
'*.aliyuncs.com': true,
|
||||
'*.127.net': true,
|
||||
'43.240.74.134': true,
|
||||
|
||||
// ZzzFun
|
||||
'*.zzzfun.one': true,
|
||||
'*.zzzfun.vip': true,
|
||||
|
||||
// 必应
|
||||
'*.bing.com': true,
|
||||
|
||||
// 我的个人域名
|
||||
'*.easyj.icu': true,
|
||||
|
||||
// 未知公司
|
||||
'*.bcebos.com': true,
|
||||
'icannwiki.org': true,
|
||||
'*.icannwiki.org': true,
|
||||
'*.sectigo.com': true,
|
||||
'*.pingdom.net': true,
|
||||
|
||||
// endregion
|
||||
|
||||
// 本地地址,无需代理
|
||||
'localhost',
|
||||
'localhost.*', // 部分VPN会在host中添加这种格式的域名指向127.0.0.1,所以也排除掉
|
||||
'127.*',
|
||||
'test.*', // 本地开发时,测试用的虚拟域名格式,无需代理
|
||||
'localhost': true,
|
||||
'localhost.*': true, // 部分VPN会在host中添加这种格式的域名指向127.0.0.1,所以也排除掉
|
||||
'127.*': true,
|
||||
'test.*': true, // 本地开发时,测试用的虚拟域名格式,无需代理
|
||||
|
||||
// 服务器端常用地址,无需代理
|
||||
'10.*',
|
||||
'172.16.*',
|
||||
'172.17.*',
|
||||
'172.18.*',
|
||||
'172.19.*',
|
||||
'172.20.*',
|
||||
'172.21.*',
|
||||
'172.22.*',
|
||||
'172.23.*',
|
||||
'172.24.*',
|
||||
'172.25.*',
|
||||
'172.26.*',
|
||||
'172.27.*',
|
||||
'172.28.*',
|
||||
'172.29.*',
|
||||
'172.30.*',
|
||||
'172.31.*',
|
||||
'10.*': true,
|
||||
'172.16.*': true,
|
||||
'172.17.*': true,
|
||||
'172.18.*': true,
|
||||
'172.19.*': true,
|
||||
'172.20.*': true,
|
||||
'172.21.*': true,
|
||||
'172.22.*': true,
|
||||
'172.23.*': true,
|
||||
'172.24.*': true,
|
||||
'172.25.*': true,
|
||||
'172.26.*': true,
|
||||
'172.27.*': true,
|
||||
'172.28.*': true,
|
||||
'172.29.*': true,
|
||||
'172.30.*': true,
|
||||
'172.31.*': true,
|
||||
|
||||
// 局域网地址,无需代理
|
||||
'192.168.*'
|
||||
]
|
||||
'192.168.*': true
|
||||
}
|
||||
},
|
||||
status: {
|
||||
enabled: false,
|
||||
|
|
|
@ -25,7 +25,7 @@ async function _winUnsetProxy (exec, setEnv) {
|
|||
regKey.get('HTTPS_PROXY', (err) => {
|
||||
if (!err) {
|
||||
regKey.remove('HTTPS_PROXY', async (err) => {
|
||||
log.info('删除环境变量https_proxy', err)
|
||||
log.warn('删除环境变量https_proxy失败:', err)
|
||||
await exec('setx DS_REFRESH "1"')
|
||||
})
|
||||
}
|
||||
|
@ -41,17 +41,19 @@ async function _winSetProxy (exec, ip, port, setEnv) {
|
|||
config = require('../../../config.js')
|
||||
}
|
||||
|
||||
let lanIpStr = ''
|
||||
for (const excludeIpPattern of config.get().proxy.excludeIpList) {
|
||||
// 跳过起注释作用的数据
|
||||
if (excludeIpPattern.indexOf('#') >= 0) {
|
||||
continue
|
||||
let excludeIpStr = ''
|
||||
for (const ip in config.get().proxy.excludeIpList) {
|
||||
if (config.get().proxy.excludeIpList[ip] === true) {
|
||||
excludeIpStr += ip + ';'
|
||||
}
|
||||
lanIpStr += excludeIpPattern + ';'
|
||||
}
|
||||
|
||||
// http=127.0.0.1:8888;https=127.0.0.1:8888 考虑这种方式
|
||||
const proxyPath = extraPath.getProxyExePath()
|
||||
await execFile(proxyPath, ['global', `http=http://${ip}:${port};https=http://${ip}:${port}`, lanIpStr])
|
||||
const execFun = 'global'
|
||||
const proxyAddr = `http=http://${ip}:${port};https=http://${ip}:${port}`
|
||||
log.info(`执行“设置系统代理”的命令: ${proxyPath} ${execFun} ${proxyAddr} ${excludeIpStr}`)
|
||||
await execFile(proxyPath, [execFun, proxyAddr, excludeIpStr])
|
||||
|
||||
if (setEnv) {
|
||||
log.info('同时设置 https_proxy')
|
||||
|
@ -77,8 +79,7 @@ const executor = {
|
|||
return _winUnsetProxy(exec, setEnv)
|
||||
} else {
|
||||
// 设置代理
|
||||
|
||||
log.info('设置代理', ip, port, setEnv)
|
||||
log.info('设置代理:', ip, port, setEnv)
|
||||
return _winSetProxy(exec, ip, port, setEnv)
|
||||
}
|
||||
},
|
||||
|
|
|
@ -41,6 +41,9 @@ export default {
|
|||
}
|
||||
},
|
||||
async apply () {
|
||||
if (this.applyLoading === true) {
|
||||
return
|
||||
}
|
||||
this.applyLoading = true
|
||||
await this.applyBefore()
|
||||
await this.saveConfig()
|
||||
|
|
|
@ -42,9 +42,9 @@
|
|||
<a-button type="primary" icon="plus" @click="addExcludeIp()"/>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="10" v-for="(item,index) of getProxyConfig().excludeIpList" :key='index'>
|
||||
<a-row :gutter="10" v-for="(item,index) of excludeIpList" :key='index'>
|
||||
<a-col :span="22">
|
||||
<a-input v-model="getProxyConfig().excludeIpList[index]"></a-input>
|
||||
<a-input :disabled="item.value === false" v-model="item.key"></a-input>
|
||||
</a-col>
|
||||
<a-col :span="2">
|
||||
<a-button type="danger" icon="minus" @click="delExcludeIp(item,index)"/>
|
||||
|
@ -93,7 +93,8 @@ export default {
|
|||
data () {
|
||||
return {
|
||||
key: 'proxy',
|
||||
loopbackVisible: false
|
||||
loopbackVisible: false,
|
||||
excludeIpList: []
|
||||
}
|
||||
},
|
||||
async created () {
|
||||
|
@ -102,7 +103,13 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
async openExternal (url) {
|
||||
this.$api.ipc.openExternal(url)
|
||||
await this.$api.ipc.openExternal(url)
|
||||
},
|
||||
ready () {
|
||||
this.initExcludeIpList()
|
||||
},
|
||||
async applyBefore () {
|
||||
this.submitExcludeIpList()
|
||||
},
|
||||
async applyAfter () {
|
||||
await this.$api.proxy.restart()
|
||||
|
@ -121,11 +128,29 @@ export default {
|
|||
getProxyConfig () {
|
||||
return this.config.proxy
|
||||
},
|
||||
initExcludeIpList () {
|
||||
this.excludeIpList = []
|
||||
for (const key in this.config.proxy.excludeIpList) {
|
||||
const value = this.config.proxy.excludeIpList[key]
|
||||
this.excludeIpList.push({
|
||||
key, value
|
||||
})
|
||||
}
|
||||
},
|
||||
addExcludeIp () {
|
||||
this.getProxyConfig().excludeIpList.unshift('')
|
||||
this.excludeIpList.unshift({ key: '', value: true })
|
||||
},
|
||||
delExcludeIp (item, index) {
|
||||
this.getProxyConfig().excludeIpList.splice(index, 1)
|
||||
this.excludeIpList.splice(index, 1)
|
||||
},
|
||||
submitExcludeIpList () {
|
||||
const excludeIpList = {}
|
||||
for (const item of this.excludeIpList) {
|
||||
if (item.key) {
|
||||
excludeIpList[item.key] = item.value
|
||||
}
|
||||
}
|
||||
this.config.proxy.excludeIpList = excludeIpList
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue