From: qydysky Date: Sat, 23 Mar 2024 19:07:31 +0000 (+0800) Subject: 1 X-Git-Tag: v0.1.20240323190918 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=5e54bde24ee90f1fb19c51b72dbc832fd96ff6c4;p=front%2F.git 1 --- diff --git a/README.md b/README.md index b15fc4c..293cd0d 100755 --- a/README.md +++ b/README.md @@ -24,7 +24,6 @@ config: - *tls*: {} 启用tls - *pub*: string 公钥pem路径 - *key*: string 私钥pem路径 -- version: string 配置版本,当变化时,将重载 - routes: [] 路由 - path: string 路径 - pathAdd: bool 将客户端访问的路径附加在path上 例:/api/req => /ws => /ws/api/req @@ -37,7 +36,7 @@ config: - (使用rand.Shuffle随机,默认) - reqBody: 请求后端前,请求数据过滤器 - action: string 可选`access`、`deny`。 - - reqSize:string 限定请求数据大小,默认为`1M` + - reqSize: string 限定请求数据大小,默认为`1M` - matchExp: string `access`时如不匹配将结束请求。`deny`时如匹配将结束请求。 - setting... 将会给backs默认值 - backs: [] 后端 diff --git a/config.go b/config.go index e2e623a..e433461 100755 --- a/config.go +++ b/config.go @@ -83,6 +83,9 @@ func (t *Config) Run(ctx context.Context, logger Logger) { func (t *Config) SwapSign(ctx context.Context, logger Logger) { var add = func(k string, route *Route, logger Logger) { route.config = t + if route.Path == "" { + return + } logger.Info(`I:`, fmt.Sprintf("%v > %v", t.Addr, k)) t.routeMap.Store(k, route) @@ -182,21 +185,6 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { t.routeP.Store(k, nil) } - var routeU = func(route *Route, logger Logger) { - route.SwapSign( - func(k string, b *Back) { - b.route = route - logger.Info(`I:`, fmt.Sprintf("%v > %v > %v", t.Addr, route.Path, b.Name)) - route.backMap.Store(k, b) - }, - func(k string, b *Back) { - logger.Info(`I:`, fmt.Sprintf("%v > %v x %v", t.Addr, route.Path, b.Name)) - route.backMap.Delete(k) - }, - logger, - ) - } - t.routeMap.Range(func(key, value any) bool { var exist bool for k := 0; k < len(t.Routes); k++ { @@ -215,7 +203,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { if _, ok := t.routeMap.Load(t.Routes[i].Path); !ok { add(t.Routes[i].Path, &t.Routes[i], logger) } - routeU(&t.Routes[i], logger) + t.Routes[i].SwapSign(logger) } } @@ -236,7 +224,10 @@ func (t *Route) Id() string { return fmt.Sprintf("%p", t) } -func (t *Route) SwapSign(add func(string, *Back), del func(string, *Back), logger Logger) { +func (t *Route) SwapSign(logger Logger) { + if t.Path == "" { + return + } t.backMap.Range(func(key, value any) bool { var exist bool for k := 0; k < len(t.Backs); k++ { @@ -246,14 +237,17 @@ func (t *Route) SwapSign(add func(string, *Back), del func(string, *Back), logge } } if !exist { - del(key.(string), value.(*Back)) + logger.Info(`I:`, fmt.Sprintf("%v > %v x %v", t.config.Addr, t.Path, value.(*Back).Name)) + t.backMap.Delete(key) } return true }) for i := 0; i < len(t.Backs); i++ { if _, ok := t.backMap.Load(t.Backs[i].Id()); !ok { - add(t.Backs[i].Id(), &t.Backs[i]) + t.Backs[i].route = t + logger.Info(`I:`, fmt.Sprintf("%v > %v > %v", t.config.Addr, t.Path, t.Backs[i].Name)) + t.backMap.Store(t.Backs[i].Id(), &t.Backs[i]) } t.Backs[i].SwapSign(logger) } diff --git a/main.go b/main.go index 9330999..c2a37aa 100755 --- a/main.go +++ b/main.go @@ -100,12 +100,12 @@ func Test(ctx context.Context, port int, logger Logger) { } func loadConfig(ctx context.Context, buf []byte, configF File, configS *[]Config, logger Logger) (md5k string, e error) { - defer func() { - if err := recover(); err != nil { - logger.Error(`E:`, err) - e = errors.New("read panic") - } - }() + // defer func() { + // if err := recover(); err != nil { + // logger.Error(`E:`, err) + // e = errors.New("read panic") + // } + // }() if i, e := configF.Read(buf); e != nil && !errors.Is(e, io.EOF) { return "", e } else if i == cap(buf) { diff --git a/main/main.json b/main/main.json index fff498f..7a5f8da 100755 --- a/main/main.json +++ b/main/main.json @@ -1,34 +1,77 @@ [ { - "addr": "0.0.0.0:8081", + "addr": "127.0.0.1:0", "matchRule": "prefix", - "copyBlocks": 100, + "copyBlocks": 1000, + "tls": { + "pub": "", + "key": "" + }, "routes": [ { - "path": "/", - "pathAdd": true, - "rollRule": "resDur_MinFirst", - "reqPather": [ - { - "action": "deny", - "matchExp": "(\\.\/|\/\\.|\/\/|\\|<|>|\\.sh|\\.cmd|\\.so|\\.exe|\\.bat|http|ftp)" - } - ], - "backs": [ - { - "name": "baidu1", - "to": "s://www.baidu.com", - "weight": 1 + "path": "", + "pathAdd": false, + "rollRule": "", + "reqBody": { + "action": "", + "reqSize": "1M", + "matchExp": "" + }, + "splicing": 0, + "errToSec": 0, + "errBanSec": 0, + "insecureSkipVerify": false, + "verifyPeerCer": "", + "filiter": { + "reqUri": { + "accessRule": "", + "items": { + "": "" + } }, - { - "name": "baidu2", - "to": "s://www.baidu.com", - "weight": 2 + "reqHeader": { + "accessRule": "", + "items": { + "": { + "key": "", + "matchExp": "" + } + } }, + "resHeader": { + "accessRule": "", + "items": { + "": { + "key": "", + "matchExp": "" + } + } + } + }, + "dealer": { + "reqHeader": [ + { + "action": "", + "key": "", + "matchExp": "", + "value": "" + } + ], + "resHeader": [ + { + "action": "", + "key": "", + "matchExp": "", + "value": "" + } + ] + }, + "backs": [ { - "name": "baidu3", - "to": "s://www.baidu.com", - "weight": 1 + "name": "b1", + "to": "", + "weight": 1, + "alwaysUp": false } ] }