2017-11-13 6 views
1

을 덮어 씁니다 :프록시 요청 호스트는이 같은 프록시를 제공하기 위해 노력하고 실제 요청

package main 

import (
    "net/http" 
) 

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

나는 golang.org가 인쇄 얻을 컬

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

로 호출. 왜 프록시 호스트 이름을 얻지 못합니까? localhost? HTTP 프록시의 버그 또는 제한 사항입니까?

업데이트

명확히하기 위해, 내가 찾던 Nginx에 서버 주소 같은 것이 http://nginx.org/en/docs/http/ngx_http_core_module.html#var_server_addr

답변

1

내가 LocalAddrContextKey를 사용해야하지만이 https://github.com/golang/go/issues/18686 해결 방법이 납치하는 설정 알려진 버그가있는 것 같습니다 http.ResponseWriter 예 :

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()) 

    })) 
}