From ba8a7d6fdbcf3911eb8adcf49bb44c221329e00a Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 30 Nov 2020 20:57:16 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=8F=8D=E5=90=91=E4=BB=A3=E7=90=86]=E5=8F=8D?= =?UTF-8?q?=E5=90=91=E4=BB=A3=E7=90=86=E9=83=A8=E5=88=86=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BB=8E500=E4=BF=AE=E6=94=B9=E4=B8=BA502?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/http_request_error.go | 14 ++++++++++++++ internal/nodes/http_request_reverse_proxy.go | 10 +++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/internal/nodes/http_request_error.go b/internal/nodes/http_request_error.go index 0e32343..bd8c77f 100644 --- a/internal/nodes/http_request_error.go +++ b/internal/nodes/http_request_error.go @@ -30,3 +30,17 @@ func (this *HTTPRequest) write500(err error) { this.writer.WriteHeader(statusCode) _, _ = this.writer.Write([]byte(http.StatusText(statusCode))) } + +func (this *HTTPRequest) write502(err error) { + if err != nil { + this.addError(err) + } + + statusCode := http.StatusBadGateway + if this.doPage(statusCode) { + return + } + this.processResponseHeaders(statusCode) + this.writer.WriteHeader(statusCode) + _, _ = this.writer.Write([]byte(http.StatusText(statusCode))) +} diff --git a/internal/nodes/http_request_reverse_proxy.go b/internal/nodes/http_request_reverse_proxy.go index 998d6f5..75d49d9 100644 --- a/internal/nodes/http_request_reverse_proxy.go +++ b/internal/nodes/http_request_reverse_proxy.go @@ -31,7 +31,7 @@ func (this *HTTPRequest) doReverseProxy() { if origin == nil { err := errors.New(this.requestPath() + ": no available backends for reverse proxy") logs.Error("REQUEST_REVERSE_PROXY", err.Error()) - this.write500(err) + this.write502(err) return } this.origin = origin // 设置全局变量是为了日志等处理 @@ -51,7 +51,7 @@ func (this *HTTPRequest) doReverseProxy() { if origin.Addr == nil { err := errors.New(this.requestPath() + ": origin '" + strconv.FormatInt(origin.Id, 10) + "' does not has a address") logs.Error("REQUEST_REVERSE_PROXY", err.Error()) - this.write500(err) + this.write502(err) return } this.RawReq.URL.Scheme = origin.Addr.Protocol.Primary().Scheme() @@ -128,7 +128,7 @@ func (this *HTTPRequest) doReverseProxy() { client, addr, err := SharedHTTPClientPool.Client(this, origin) if err != nil { logs.Error("REQUEST_REVERSE_PROXY", err.Error()) - this.write500(err) + this.write502(err) return } @@ -142,7 +142,7 @@ func (this *HTTPRequest) doReverseProxy() { if !ok || httpErr.Err != context.Canceled { // TODO 如果超过最大失败次数,则下线 - this.write500(err) + this.write502(err) logs.Println("REQUEST_REVERSE_PROXY", this.RawReq.URL.String()+"': "+err.Error()) } else { // 是否为客户端方面的错误 @@ -156,7 +156,7 @@ func (this *HTTPRequest) doReverseProxy() { } if !isClientError { - this.write500(err) + this.write502(err) } } if resp != nil && resp.Body != nil {