mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-10-23 19:14:09 +02:00
Fixed #856
Updated upstreamHostSwap to accept currentTarget and avoid swapping to the same proxy endpoint, preventing unnecessary loopback handling. Also bumped SYSTEM_VERSION to 3.2.9.
This commit is contained in:
@@ -44,7 +44,7 @@ import (
|
|||||||
const (
|
const (
|
||||||
/* Build Constants */
|
/* Build Constants */
|
||||||
SYSTEM_NAME = "Zoraxy"
|
SYSTEM_NAME = "Zoraxy"
|
||||||
SYSTEM_VERSION = "3.2.8"
|
SYSTEM_VERSION = "3.2.9"
|
||||||
DEVELOPMENT_BUILD = false
|
DEVELOPMENT_BUILD = false
|
||||||
|
|
||||||
/* System Constants */
|
/* System Constants */
|
||||||
|
@@ -110,13 +110,13 @@ func (router *Router) rewriteURL(rooturl string, requestURL string) string {
|
|||||||
// upstreamHostSwap check if this loopback to one of the proxy rule in the system. If yes, do a shortcut target swap
|
// upstreamHostSwap check if this loopback to one of the proxy rule in the system. If yes, do a shortcut target swap
|
||||||
// this prevents unnecessary external DNS lookup and connection, return true if swapped and request is already handled
|
// this prevents unnecessary external DNS lookup and connection, return true if swapped and request is already handled
|
||||||
// by the loopback handler. Only continue if return is false
|
// by the loopback handler. Only continue if return is false
|
||||||
func (h *ProxyHandler) upstreamHostSwap(w http.ResponseWriter, r *http.Request, selectedUpstream *loadbalance.Upstream) bool {
|
func (h *ProxyHandler) upstreamHostSwap(w http.ResponseWriter, r *http.Request, selectedUpstream *loadbalance.Upstream, currentTarget *ProxyEndpoint) bool {
|
||||||
upstreamHostname := selectedUpstream.OriginIpOrDomain
|
upstreamHostname := selectedUpstream.OriginIpOrDomain
|
||||||
if strings.Contains(upstreamHostname, ":") {
|
if strings.Contains(upstreamHostname, ":") {
|
||||||
upstreamHostname = strings.Split(upstreamHostname, ":")[0]
|
upstreamHostname = strings.Split(upstreamHostname, ":")[0]
|
||||||
}
|
}
|
||||||
loopbackProxyEndpoint := h.Parent.GetProxyEndpointFromHostname(upstreamHostname)
|
loopbackProxyEndpoint := h.Parent.GetProxyEndpointFromHostname(upstreamHostname)
|
||||||
if loopbackProxyEndpoint != nil {
|
if loopbackProxyEndpoint != nil && loopbackProxyEndpoint != currentTarget {
|
||||||
//This is a loopback request. Swap the target to the loopback target
|
//This is a loopback request. Swap the target to the loopback target
|
||||||
//h.Parent.Option.Logger.PrintAndLog("proxy", "Detected a loopback request to self. Swap the target to "+loopbackProxyEndpoint.RootOrMatchingDomain, nil)
|
//h.Parent.Option.Logger.PrintAndLog("proxy", "Detected a loopback request to self. Swap the target to "+loopbackProxyEndpoint.RootOrMatchingDomain, nil)
|
||||||
if loopbackProxyEndpoint.IsEnabled() {
|
if loopbackProxyEndpoint.IsEnabled() {
|
||||||
@@ -147,7 +147,7 @@ func (h *ProxyHandler) hostRequest(w http.ResponseWriter, r *http.Request, targe
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Upstream Host Swap (use to detect loopback to self) */
|
/* Upstream Host Swap (use to detect loopback to self) */
|
||||||
if h.upstreamHostSwap(w, r, selectedUpstream) {
|
if h.upstreamHostSwap(w, r, selectedUpstream, target) {
|
||||||
//Request handled by the loopback handler
|
//Request handled by the loopback handler
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user