From d5b1cbb78ff43d20ea7f2f99c4fa98e97c58640f Mon Sep 17 00:00:00 2001 From: Toby Chui Date: Mon, 24 Nov 2025 20:04:10 +0800 Subject: [PATCH] Fixed #900 Fixed panic on redirection --- src/mod/dynamicproxy/proxyRequestHandler.go | 45 +++++++++++++-------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/mod/dynamicproxy/proxyRequestHandler.go b/src/mod/dynamicproxy/proxyRequestHandler.go index 10d28af..d05c0cb 100644 --- a/src/mod/dynamicproxy/proxyRequestHandler.go +++ b/src/mod/dynamicproxy/proxyRequestHandler.go @@ -363,23 +363,34 @@ func (router *Router) logRequest(r *http.Request, succ bool, statusCode int, for // in that case we will log it by default and will not enter this routine return } - if router.Option.StatisticCollector != nil && !endpoint.DisableStatisticCollection { - go func() { - requestInfo := statistic.RequestInfo{ - IpAddr: netutils.GetRequesterIP(r), - RequestOriginalCountryISOCode: router.Option.GeodbStore.GetRequesterCountryISOCode(r), - Succ: succ, - StatusCode: statusCode, - ForwardType: forwardType, - Referer: r.Referer(), - UserAgent: r.UserAgent(), - RequestURL: r.Host + r.RequestURI, - Target: originalHostname, - Upstream: upstreamHostname, - } - router.Option.StatisticCollector.RecordRequest(requestInfo) - }() - } router.Option.Logger.LogHTTPRequest(r, forwardType, statusCode, originalHostname, upstreamHostname) + + if router.Option.StatisticCollector == nil { + // Statistic collection not yet initialized + return + } + + if endpoint != nil && !endpoint.DisableStatisticCollection { + // Endpoint level statistic collection disabled + return + } + + // Proceed to record the request info + go func() { + requestInfo := statistic.RequestInfo{ + IpAddr: netutils.GetRequesterIP(r), + RequestOriginalCountryISOCode: router.Option.GeodbStore.GetRequesterCountryISOCode(r), + Succ: succ, + StatusCode: statusCode, + ForwardType: forwardType, + Referer: r.Referer(), + UserAgent: r.UserAgent(), + RequestURL: r.Host + r.RequestURI, + Target: originalHostname, + Upstream: upstreamHostname, + } + router.Option.StatisticCollector.RecordRequest(requestInfo) + }() + }