From 40744ae6c1785ea46c04c61b1d27d6307678b042 Mon Sep 17 00:00:00 2001 From: wi1dcard Date: Fri, 22 Mar 2024 11:53:50 +0800 Subject: [PATCH] Improve error log. --- fingerproxy.go | 13 +++++++++++++ pkg/proxyserver/proxyserver.go | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/fingerproxy.go b/fingerproxy.go index dfb23a6..13ef937 100644 --- a/fingerproxy.go +++ b/fingerproxy.go @@ -3,6 +3,7 @@ package fingerproxy import ( "context" "crypto/tls" + "errors" "flag" "fmt" "log" @@ -91,12 +92,24 @@ func StartPrometheusClient(listenAddr string) { })) } +func proxyErrorHandler(rw http.ResponseWriter, req *http.Request, err error) { + ReverseProxyLog.Printf("proxy %s error (from %s): %v", req.URL.String(), req.RemoteAddr, err) + + if errors.Is(err, context.DeadlineExceeded) || + errors.Is(err, context.Canceled) { + rw.WriteHeader(http.StatusGatewayTimeout) + } else { + rw.WriteHeader(http.StatusBadGateway) + } +} + func DefaultReverseProxyHTTPHandler(forwardTo *url.URL) *reverseproxy.HTTPHandler { return reverseproxy.NewHTTPHandler( forwardTo, &httputil.ReverseProxy{ ErrorLog: ReverseProxyLog, FlushInterval: ReverseProxyFlushInterval, + ErrorHandler: proxyErrorHandler, // TODO: customize transport Transport: http.DefaultTransport.(*http.Transport).Clone(), }, diff --git a/pkg/proxyserver/proxyserver.go b/pkg/proxyserver/proxyserver.go index d3303a1..1202c8c 100644 --- a/pkg/proxyserver/proxyserver.go +++ b/pkg/proxyserver/proxyserver.go @@ -83,7 +83,7 @@ func (server *Server) serveConn(conn net.Conn) { io.WriteString(re.Conn, "HTTP/1.0 400 Bad Request\r\n\r\nClient sent an HTTP request to an HTTPS server.\n") } - server.logf("tls handshake: %s", err) + server.logf("tls handshake error from %s: %s", conn.RemoteAddr(), err) server.metricsRequestsTotalInc("0", "") return } @@ -91,7 +91,7 @@ func (server *Server) serveConn(conn net.Conn) { // client hello stored in hajackedConn while reading for real handshake rec, err := hijackedConn.GetClientHello() if err != nil { - server.logf("could not read client hello from: %s", err) + server.logf("could not read client hello from %s: %s", conn.RemoteAddr(), err) server.metricsRequestsTotalInc("0", "") return }