Schauen wir uns zunächst an, wie man eine Reverse-Proxy-Struktur erhält
func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy { targetQuery := target.RawQuery director := func(req *http.Request) { req.URL.Scheme = target.Scheme req.URL.Host = target.Host req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path) if targetQuery == "" || req.URL.RawQuery == "" { req.URL.RawQuery = targetQuery + req.URL.RawQuery } else { req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery } if _, ok := req.Header["User-Agent"]; !ok { req.Header.Set("User-Agent", "") } } return &ReverseProxy{Director: director} }
NewSingleHostReverseProxy verwendet einen Abschluss als Director, um eine neue ReverseProxy-Struktur und den Director zu erstellen ist Dies ist die Proxy-Funktion, die wir standardmäßig implementieren. In dieser Funktion werden Protokoll, Host und Pfad der Anforderungs-URL neu geschrieben. Allerdings wird req.Host nicht neu geschrieben, was dazu führt, dass unser Reverse-Proxy nur lokal als Proxy fungiert. Wir müssen diese Funktion also nur ändern. Es gibt zwei Möglichkeiten, sie zu ändern.
(Empfohlenes Tutorial: Golang-Tutorial )
Änderungsmethode:
1. Wir können die Funktion NewSingleHostReverseProxy kopieren und ändern ist auch Es ist nicht kompliziert. Verwenden Sie dann unsere benutzerdefinierte Funktion, um einen neuen Proxy zu erstellen, bei dem die Reverse-Proxy-Struktur erforderlich ist.
func NewProxy(target *url.URL) *httputil.ReverseProxy { targetQuery := target.RawQuery director := func(req *http.Request) { req.Host = target.Host // -- 加入这句 -- req.URL.Scheme = target.Scheme req.URL.Host = target.Host req.URL.Path = singleJoiningSlash(target.Path, req.URL.Path) if targetQuery == "" || req.URL.RawQuery == "" { req.URL.RawQuery = targetQuery + req.URL.RawQuery } else { req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery } if _, ok := req.Header["User-Agent"]; !ok { // explicitly disable User-Agent so it's not set to default value req.Header.Set("User-Agent", "") } } return &httputil.ReverseProxy{Director: director} }
Ersetzen Sie dann httputil.NewSingleHostReverseProxy(u) durch NewProxy(u), um einen Proxy für andere Domänennamen zu erstellen.
2. Passen Sie die Director-Funktion an. Wir verwenden weiterhin die Funktion NewSingleHostReverseProxy, um einen neuen Proxy zu erstellen und passen dann eine Director-Funktion dafür an.
p := httputil.NewSingleHostReverseProxy(u) d := p.Director p.Director = func(r *http.Request) { d(r) r.Host = u.Host }
Empfohlene verwandte Video-Tutorials: Golang-Video-Tutorial
Das obige ist der detaillierte Inhalt vonAuf den Golang-Reverse-Proxy kann nicht zugegriffen werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!