From 898dc4ef77335345911fcab3e41b9ee341a24736 Mon Sep 17 00:00:00 2001 From: qydysky Date: Sun, 10 Mar 2024 20:43:55 +0800 Subject: [PATCH] 1 --- .gitignore | 5 +++-- config.go | 11 ++++++----- http.go | 10 ++++++---- main.go | 2 +- ws.go | 10 ++++++---- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index ea2548f..0dffc1a 100755 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -main/main -main/main.exe +*.exe +*.run +main/main.json diff --git a/config.go b/config.go index 3870b04..5fd13c6 100755 --- a/config.go +++ b/config.go @@ -92,8 +92,9 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { } var backIs []*Back + if t, e := r.Cookie("_psign_" + cookie); e == nil { - if backP, ok := route.backMap.Load(t.Value); ok && backP.(*Back).IsLive() && HeaderMatchs(backP.(*Back).ReqHeader, r) { + if backP, ok := route.backMap.Load(t.Value); ok && HeaderMatchs(backP.(*Back).ReqHeader, r) { backP.(*Back).cloneDealer() for i := 0; i < backP.(*Back).Weight; i++ { backIs = append(backIs, backP.(*Back)) @@ -104,9 +105,9 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { backIs = append(backIs, route.FiliterBackByRequest(r)...) if len(backIs) == 0 { - logger.Warn(`W:`, fmt.Sprintf("%v > %v %v", route.config.Addr, route.Path, ErrAllBacksFail)) - w.Header().Add(header+"Error", ErrAllBacksFail.Error()) - w.WriteHeader(http.StatusServiceUnavailable) + logger.Warn(`W:`, fmt.Sprintf("%v > %v %v %v", route.config.Addr, route.Path, r.URL.RequestURI(), ErrNoRoute)) + w.Header().Add(header+"Error", ErrNoRoute.Error()) + w.WriteHeader(http.StatusNotFound) return } @@ -211,7 +212,7 @@ func (t *Route) SwapSign(add func(string, *Back), del func(string, *Back), logge func (t *Route) FiliterBackByRequest(r *http.Request) []*Back { var backLink []*Back for i := 0; i < len(t.Backs); i++ { - if t.Backs[i].IsLive() && HeaderMatchs(t.Backs[i].ReqHeader, r) { + if HeaderMatchs(t.Backs[i].ReqHeader, r) { t.Backs[i].cloneDealer() for k := 0; k < t.Backs[i].Weight; k++ { backLink = append(backLink, &t.Backs[i]) diff --git a/http.go b/http.go index c46e55c..eb0d40d 100644 --- a/http.go +++ b/http.go @@ -24,9 +24,13 @@ func httpDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, rou chosenBack = backs[0] backs = backs[1:] + if !chosenBack.IsLive() { + continue + } + url := chosenBack.To if chosenBack.PathAdd { - url += r.URL.String() + url += r.URL.RequestURI() } url = "http" + url @@ -59,11 +63,9 @@ func httpDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, rou } } - if 0 == len(backs) && resp == nil { + if resp == nil { logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v http %v %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, ErrAllBacksFail, time.Since(opT))) return ErrAllBacksFail - } else if resp == nil { - return ErrBacksFail } if chosenBack.ErrToSec != 0 && time.Since(opT).Seconds() > chosenBack.ErrToSec { diff --git a/main.go b/main.go index 3e47989..fe86ce0 100755 --- a/main.go +++ b/main.go @@ -179,5 +179,5 @@ var ( ErrHeaderCheckFail = errors.New("ErrHeaderCheckFail") ErrBodyCheckFail = errors.New("ErrBodyCheckFail") ErrAllBacksFail = errors.New("ErrAllBacksFail") - ErrBacksFail = errors.New("ErrBacksFail") + ErrNoRoute = errors.New("ErrNoRoute") ) diff --git a/ws.go b/ws.go index bb9be74..b3006ad 100644 --- a/ws.go +++ b/ws.go @@ -33,6 +33,10 @@ func wsDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, route chosenBack = backs[0] backs = backs[1:] + if !chosenBack.IsLive() { + continue + } + _, e := BodyMatchs(chosenBack.tmp.ReqBody, r) if e != nil { logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v ws %v %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, e, time.Since(opT))) @@ -41,7 +45,7 @@ func wsDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, route url := chosenBack.To if chosenBack.PathAdd { - url += r.URL.String() + url += r.URL.RequestURI() } url = "ws" + url @@ -61,11 +65,9 @@ func wsDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, route } } - if 0 == len(backs) && (resp == nil || conn == nil) { + if resp == nil || conn == nil { logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v ws %v %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, ErrAllBacksFail, time.Since(opT))) return ErrAllBacksFail - } else if resp == nil || conn == nil { - return ErrBacksFail } if chosenBack.ErrToSec != 0 && time.Since(opT).Seconds() > chosenBack.ErrToSec { -- 2.39.2