mirror of
https://github.com/fatedier/frp.git
synced 2026-05-01 05:29:10 +08:00
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.
This commit is contained in:
@@ -75,16 +75,21 @@ func (pxy *HTTPProxy) Run() (remoteAddr string, err error) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
addrs := make([]string, 0)
|
domains := make([]string, 0, len(pxy.cfg.CustomDomains)+1)
|
||||||
for _, domain := range pxy.cfg.CustomDomains {
|
for _, d := range pxy.cfg.CustomDomains {
|
||||||
if domain == "" {
|
if d != "" {
|
||||||
continue
|
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
|
routeConfig.Domain = domain
|
||||||
for _, location := range locations {
|
for _, location := range locations {
|
||||||
routeConfig.Location = location
|
routeConfig.Location = location
|
||||||
|
|
||||||
tmpRouteConfig := routeConfig
|
tmpRouteConfig := routeConfig
|
||||||
|
|
||||||
// handle group
|
// handle group
|
||||||
@@ -93,12 +98,10 @@ func (pxy *HTTPProxy) Run() (remoteAddr string, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
pxy.closeFuncs = append(pxy.closeFuncs, func() {
|
pxy.closeFuncs = append(pxy.closeFuncs, func() {
|
||||||
pxy.rc.HTTPGroupCtl.UnRegister(pxy.name, pxy.cfg.LoadBalancer.Group, tmpRouteConfig)
|
pxy.rc.HTTPGroupCtl.UnRegister(pxy.name, pxy.cfg.LoadBalancer.Group, tmpRouteConfig)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
// no group
|
|
||||||
err = pxy.rc.HTTPReverseProxy.Register(routeConfig)
|
err = pxy.rc.HTTPReverseProxy.Register(routeConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -112,39 +115,6 @@ func (pxy *HTTPProxy) Run() (remoteAddr string, err error) {
|
|||||||
routeConfig.Domain, routeConfig.Location, pxy.cfg.LoadBalancer.Group, pxy.cfg.RouteByHTTPUser)
|
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, ",")
|
remoteAddr = strings.Join(addrs, ",")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user