2017-11-13 2 views
1

ich einen Proxy so zu dienen versuche:Proxy Anfrage Host wird durch die reale Anfrage überschrieben

package main 

import (
    "net/http" 
) 

func main() { 
    http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
     println(r.Host) 
    })) 
} 

und es mit curl

curl -k -x http://localhost:8080 http://golang.org/

Aufruf ich golang.org ausgedruckt. Warum bekomme ich den Proxy-Hostnamen localhost nicht? ist das ein Fehler oder eine Einschränkung mit dem HTTP-Proxy?

aktualisieren

Um zu klären, was ich suche ist so etwas wie Nginx-Server-Adresse http://nginx.org/en/docs/http/ngx_http_core_module.html#var_server_addr

Antwort

1

ich LocalAddrContextKey verwenden sollte, aber sieht aus wie es ein bekannter Fehler bei der Einstellung ist es https://github.com/golang/go/issues/18686 Eine Abhilfe ist kapern die http.ResponseWriter ex:

package main 

import (
    "net/http" 
) 

func main() { 
    http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 

     hij, ok := w.(http.Hijacker) 
     if !ok { 
      panic("http server does not support hijacker") 
     } 

     clientConn, _, err := hij.Hijack() 
     if err != nil { 
      panic(err.Error()) 
     } 

     println(clientConn.LocalAddr().String()) 

    })) 
} 
Verwandte Themen