✨ feat(37回调): 添加大区集中转发接口
This commit is contained in:
46
gm-server/config/config.sq2.ts
Normal file
46
gm-server/config/config.sq2.ts
Normal 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,
|
||||
};
|
||||
};
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
13
web-server/config/config.distribute.ts
Normal file
13
web-server/config/config.distribute.ts
Normal 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
|
||||
};
|
||||
};
|
||||
@@ -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
|
||||
|
||||
49
web-server/config/config.sq2.ts
Normal file
49
web-server/config/config.sq2.ts
Normal 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
|
||||
};
|
||||
};
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user