From 427c4ca3ae1fad712af0391be47840f9f6f3e7a5 Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 6 Mar 2026 21:17:30 +0800 Subject: [PATCH] server/proxy: simplify HTTP proxy domain registration by removing duplicate loop (#5207) The Run() method had two nearly identical loop blocks for registering custom domains and subdomain, with the same group/non-group registration logic copy-pasted (~30 lines of duplication). Consolidate by collecting all domains into a single slice first, then iterating once with the shared registration logic. Also fixes a minor inconsistency where the custom domain block used routeConfig.Domain in CanonicalAddr but the subdomain block used tmpRouteConfig.Domain. --- server/proxy/http.go | 50 +++++++++----------------------------------- 1 file changed, 10 insertions(+), 40 deletions(-) diff --git a/server/proxy/http.go b/server/proxy/http.go index 6f0eb008..31b00410 100644 --- a/server/proxy/http.go +++ b/server/proxy/http.go @@ -75,16 +75,21 @@ func (pxy *HTTPProxy) Run() (remoteAddr string, err error) { } }() - addrs := make([]string, 0) - for _, domain := range pxy.cfg.CustomDomains { - if domain == "" { - continue + domains := make([]string, 0, len(pxy.cfg.CustomDomains)+1) + for _, d := range pxy.cfg.CustomDomains { + if d != "" { + domains = append(domains, d) } + } + if pxy.cfg.SubDomain != "" { + domains = append(domains, pxy.cfg.SubDomain+"."+pxy.serverCfg.SubDomainHost) + } + addrs := make([]string, 0) + for _, domain := range domains { routeConfig.Domain = domain for _, location := range locations { routeConfig.Location = location - tmpRouteConfig := routeConfig // handle group @@ -93,12 +98,10 @@ func (pxy *HTTPProxy) Run() (remoteAddr string, err error) { if err != nil { return } - pxy.closeFuncs = append(pxy.closeFuncs, func() { pxy.rc.HTTPGroupCtl.UnRegister(pxy.name, pxy.cfg.LoadBalancer.Group, tmpRouteConfig) }) } else { - // no group err = pxy.rc.HTTPReverseProxy.Register(routeConfig) if err != nil { return @@ -112,39 +115,6 @@ func (pxy *HTTPProxy) Run() (remoteAddr string, err error) { routeConfig.Domain, routeConfig.Location, pxy.cfg.LoadBalancer.Group, pxy.cfg.RouteByHTTPUser) } } - - if pxy.cfg.SubDomain != "" { - routeConfig.Domain = pxy.cfg.SubDomain + "." + pxy.serverCfg.SubDomainHost - for _, location := range locations { - routeConfig.Location = location - - tmpRouteConfig := routeConfig - - // handle group - if pxy.cfg.LoadBalancer.Group != "" { - err = pxy.rc.HTTPGroupCtl.Register(pxy.name, pxy.cfg.LoadBalancer.Group, pxy.cfg.LoadBalancer.GroupKey, routeConfig) - if err != nil { - return - } - - pxy.closeFuncs = append(pxy.closeFuncs, func() { - pxy.rc.HTTPGroupCtl.UnRegister(pxy.name, pxy.cfg.LoadBalancer.Group, tmpRouteConfig) - }) - } else { - err = pxy.rc.HTTPReverseProxy.Register(routeConfig) - if err != nil { - return - } - pxy.closeFuncs = append(pxy.closeFuncs, func() { - pxy.rc.HTTPReverseProxy.UnRegister(tmpRouteConfig) - }) - } - addrs = append(addrs, util.CanonicalAddr(tmpRouteConfig.Domain, pxy.serverCfg.VhostHTTPPort)) - - xl.Infof("http proxy listen for host [%s] location [%s] group [%s], routeByHTTPUser [%s]", - routeConfig.Domain, routeConfig.Location, pxy.cfg.LoadBalancer.Group, pxy.cfg.RouteByHTTPUser) - } - } remoteAddr = strings.Join(addrs, ",") return }