Auf den Golang-Reverse-Proxy kann nicht zugegriffen werden
Mar 12, 2020 am 11:26 AMSchauen 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie kann ich Dateien mit Golang sicher lesen und schreiben?

Wie konfiguriere ich den Verbindungspool für die Golang-Datenbankverbindung?

Ähnlichkeiten und Unterschiede zwischen Golang und C++

Wie steil ist die Lernkurve der Golang-Framework-Architektur?

Wie generiere ich zufällige Elemente aus einer Liste in Golang?

Vergleich der Vor- und Nachteile des Golang-Frameworks

Was sind die Best Practices für die Fehlerbehandlung im Golang-Framework?

Anweisungen zur Verwendung des Golang-Framework-Dokuments
