Auf den Golang-Reverse-Proxy kann nicht zugegriffen werden

王林
Freigeben: 2020-03-12 11:26:09
Original
2812 Leute haben es durchsucht

Auf den Golang-Reverse-Proxy kann nicht zugegriffen werden

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}
}
Nach dem Login kopieren

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}
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage