From 00ea31f2f65526d9338f41f15d615db6998ce360 Mon Sep 17 00:00:00 2001 From: Mechiel Lukkien Date: Tue, 21 Mar 2023 09:25:49 +0100 Subject: [PATCH] do not generate http status 502 for canceled http requests do log them with level debug, and print the error in the http access log line. --- http/web.go | 6 +++++- http/webserver.go | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/http/web.go b/http/web.go index 4137d07..86c4ad4 100644 --- a/http/web.go +++ b/http/web.go @@ -152,7 +152,11 @@ func (w *loggingWriter) Done() { tlsinfo = "(other)" } } - xlog.WithContext(w.R.Context()).Debugx("http request", w.WriteErr, + err := w.WriteErr + if err == nil { + err = w.R.Context().Err() + } + xlog.WithContext(w.R.Context()).Debugx("http request", err, mlog.Field("httpaccess", ""), mlog.Field("handler", w.Handler), mlog.Field("method", method), diff --git a/http/webserver.go b/http/webserver.go index 666ea64..fafb7d9 100644 --- a/http/webserver.go +++ b/http/webserver.go @@ -1,6 +1,7 @@ package http import ( + "context" "errors" "fmt" htmltemplate "html/template" @@ -415,6 +416,10 @@ func HandleForward(h *config.WebForward, w http.ResponseWriter, r *http.Request, proxy.FlushInterval = time.Duration(-1) // Flush after each write. proxy.ErrorLog = golog.New(mlog.ErrWriter(mlog.New("net/http/httputil").WithContext(r.Context()), mlog.LevelDebug, "reverseproxy error"), "", 0) proxy.ErrorHandler = func(w http.ResponseWriter, r *http.Request, err error) { + if errors.Is(err, context.Canceled) { + log().Debugx("forwarding request to backend webserver", err, mlog.Field("url", r.URL)) + return + } log().Errorx("forwarding request to backend webserver", err, mlog.Field("url", r.URL)) if os.IsTimeout(err) { http.Error(w, "504 - gateway timeout"+recvid(), http.StatusGatewayTimeout)