feat(37回调): 添加大区集中转发接口

This commit is contained in:
luying
2022-11-09 16:21:24 +08:00
parent 81f0997304
commit e442fa6e7c
8 changed files with 177 additions and 48 deletions

View File

@@ -0,0 +1,46 @@
import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';
import defaultConfig from './config.default';
export default (appInfo: EggAppInfo) => {
const config = {} as PowerPartial<EggAppConfig>;
// add your special config in here
config.mongoose = {
url: 'mongodb://dbop:zyzSQ2021@dds-8vb7d5060bb271d41.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb7d5060bb271d42.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb7d5060bb271d43.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-508112745', // 内网
options: { useNewUrlParser: true, useUnifiedTopology: true },
};
config.gmmongoose = {
url: 'mongodb://dbop:zyzSQGm2021@dds-8vb5de93552a67941.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb5de93552a67942.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb5de93552a67943.mongodb.zhangbei.rds.aliyuncs.com:3717/zyzgm?readPreference=secondary&replicaSet=mgset-508112742', // 内网
options: { useNewUrlParser: true, useUnifiedTopology: true },
};
config.redis = {
url: 'r-8vb7l1s8ne4vm6v6x6.redis.zhangbei.rds.aliyuncs.com', // 内网
pw: 'PANl3Vr2eozkq4N2'
};
config.customLogger = {
linkLogger: {
file: '/zyz_logs/gm-server/link-log.log',
formatter(meta) {
return `[${meta.level}] [${meta.date}] ${meta.message}`;
},
},
};
config.logrotator = {
filesRotateBySize: [
'/zyz_logs/gm-server/link-log.log',
],
maxFileSize: 1024,
};
// the return config will combines to EggAppConfig
return {
...defaultConfig(appInfo),
...config,
};
};

View File

@@ -33,7 +33,7 @@ elif [ ${1} == 'sq1' ] ; then
elif [ ${1} == 'sq2' ] ; then
destUrl="root@sq2:/root/zyz/"
port=3737
env='sq1'
env='sq2'
elif [ ${1} == 'sq3' ] ; then
destUrl="root@sq3:/root/zyz/"
port=3737

View File

@@ -1,4 +1,67 @@
import { RegionModel } from '@db/Region';
import { ServerlistModel } from '@db/Serverlist';
import proxy from 'egg-http-proxy-middleware';
module.exports = proxy;
module.exports = () => {
return async function (ctx, next) {
if(!ctx.app.config.envToHost) {
let envToHost = new Map<string, string>();
let regions = await RegionModel.getAllRegion();
for(let { env, webHost } of regions) {
envToHost.set(env, webHost);
}
ctx.app.config.envToHost = envToHost;
}
if(!ctx.app.config.sidToHost) {
let envToHost = ctx.app.config.envToHost||new Map();
let sidToHost = new Map<string, string>();
let servers = await ServerlistModel.getAllServerList();
for(let { id, env } of servers) {
let webHost = envToHost.get(env);
sidToHost.set(id.toString(), webHost);
}
ctx.app.config.sidToHost = sidToHost;
}
let options = {};
for(let [env, webHost] of ctx.app.config.envToHost) {
options[`/web/${env}/`] = {
target: webHost,
changeOrigin: true,
secure: true,
pathRewrite: function(path) {
console.log('proxy', path, path.replace(`/web/${env}/`, '/web/'))
return path.replace(`/web/${env}/`, '/web/')
}
}
}
if(ctx.request.header['is-proxy'] != 'true') {
let url = getProxyUrl(ctx.request.url);
if(url) {
let sid = ctx.request.method == 'GET'? ctx.query.sid.toString(): ctx.request.body.sid.toString();
options[url] = {
target: ctx.app.config.sidToHost.get(sid),
changeOrigin: true,
secure: true,
headers: { "is-proxy": "true" }
}
}
}
return proxy(options)(ctx, next);
};
};
function getProxyUrl(url: string) {
const urls = [
'/cb/treatusername',
'/cb/treatguildname',
'/cb/getguildbyuser',
'/cb/refundioscallback'
];
for(let str of urls) {
if(url && url.startsWith(str)) {
return str;
}
}
}

View File

@@ -18,7 +18,7 @@ export default (appInfo: EggAppInfo) => {
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',
};
// add your egg config in here
config.middleware = [ 'parmsDecode', 'getIp', 'proxy' ];
config.middleware = [ 'parmsDecode', 'getIp' ];
config.mongoose = {
url: 'mongodb://dbop:zyzdbopbantu@dds-8vbdb47c6fb58a541.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vbdb47c6fb58a542.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-500808098', // 内网
@@ -75,32 +75,6 @@ export default (appInfo: EggAppInfo) => {
sourceUrl: `https://github.com/eggjs/examples/tree/master/${appInfo.name}`,
};
let regions = [ // 大区数据
{ env: 'stable', name: "常山少年", domain: 'http://zyz_gm.trgame.cn' },
{ env: 'alpha', name: "测试服", domain: 'http://pinus_gm_test.trgame.cn' },
{ env: 'dev', name: "开发服", domain: 'http://zyzdev_gm.trgame.cn' },
{ env: 'isbn', name: "办好福", domain: 'http://zyz_isbn_gm.trgame.cn' },
// 37测试服组
{ env: 'sq1', name: "37测试1服", domain: 'http://gm-sgzzyz.yev242.com' },
];
config.regions = regions;
let httpProxy: any = {};
for(let { env, domain } of regions) {
httpProxy[`/web/${env}/`] = {
target: domain,
changeOrigin: true,
secure: true,
pathRewrite: function(path) {
console.log('proxy', path, path.replace(`/web/${env}/`, '/web/'))
return path.replace(`/web/${env}/`, '/web/')
}
}
}
config.proxy = httpProxy;
// the return config will combines to EggAppConfig
return {
...config,

View File

@@ -0,0 +1,13 @@
import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';
import defaultConfig from './config.default';
export default (appInfo: EggAppInfo) => {
const config = {} as PowerPartial<EggAppConfig>;
config.middleware = [ 'parmsDecode', 'getIp', 'proxy' ];
// the return config will combines to EggAppConfig
return {
...defaultConfig(appInfo),
...config
};
};

View File

@@ -16,24 +16,7 @@ export default (appInfo: EggAppInfo) => {
url: '127.0.0.1', // 内网
pw: ''
};
let regions = [ // 大区数据
{ id: 1, env: 'development', name: "测试", domain: 'http://127.0.0.1:9000' },
];
config.regions = regions;
let httpProxy: any = {};
for(let { env, domain } of regions) {
httpProxy[`/web/${env}/`] = {
target: domain,
changeOrigin: true,
secure: true,
pathRewrite: function(path) {
console.log('proxy', path, path.replace(`/web/${env}/`, '/web/'))
return path.replace(`/web/${env}/`, '/web/')
}
}
}
config.proxy = httpProxy;
config.decodeParm = true;
// the return config will combines to EggAppConfig

View File

@@ -0,0 +1,49 @@
import { EggAppConfig, EggAppInfo, PowerPartial } from 'egg';
import defaultConfig from './config.default';
export default (appInfo: EggAppInfo) => {
const config = {} as PowerPartial<EggAppConfig>;
config.middleware = [ 'parmsDecode', 'getIp', 'proxy' ];
config.mongoose = {
url: 'mongodb://dbop:zyzSQ2021@dds-8vb7d5060bb271d41.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb7d5060bb271d42.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb7d5060bb271d43.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-508112745', // 内网
options: { useNewUrlParser: true, useUnifiedTopology: true },
};
config.gmmongoose = {
url: 'mongodb://dbop:zyzSQGm2021@dds-8vb5de93552a67941.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb5de93552a67942.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vb5de93552a67943.mongodb.zhangbei.rds.aliyuncs.com:3717/zyzgm?readPreference=secondary&replicaSet=mgset-508112742', // 内网
options: { useNewUrlParser: true, useUnifiedTopology: true },
};
config.redis = {
url: 'r-8vb7l1s8ne4vm6v6x6.redis.zhangbei.rds.aliyuncs.com', // 内网
pw: 'PANl3Vr2eozkq4N2'
};
config.xtransit = {
server: 'ws://172.16.4.109:9092',
appId: 4,
appSecret: '4ce0f5d8561939271c1d8c5714a9d9eb'
};
config.customLogger = {
linkLogger: {
file: '/zyz_logs/web-server/link-log.log',
formatter(meta) {
return `[${meta.level}] [${meta.date}] ${meta.message}`;
},
},
};
config.logrotator = {
filesRotateBySize: [
'/zyz_logs/web-server/link-log.log',
],
maxFileSize: 1024,
};
// the return config will combines to EggAppConfig
return {
...defaultConfig(appInfo),
...config
};
};

View File

@@ -28,7 +28,8 @@
"alpha": "cross-env EGG_SERVER_ENV=alpha npm run dev",
"stable": "cross-env EGG_SERVER_ENV=stable npm run dev",
"deve": "cross-env EGG_SERVER_ENV=dev npm run dev",
"sq1": "cross-env EGG_SERVER_ENV=sq1 npm run dev"
"sq1": "cross-env EGG_SERVER_ENV=sq1 npm run dev",
"sq2": "cross-env EGG_SERVER_ENV=sq2 npm run dev"
},
"dependencies": {
"@types/underscore": "^1.11.3",