mirror of
https://github.com/openfaas/faas.git
synced 2025-06-09 08:46:48 +00:00
Set upstream X-Forwarded Host and For headers if not present
- remove http client host override fix #847 - X-Forwarded-For and X-Forwarded-Host are usually handled by the ingress controller, if those headers are not set then the gateway will create them Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
This commit is contained in:
parent
96504b0a74
commit
3d44fa813a
@ -76,12 +76,15 @@ func buildUpstreamRequest(r *http.Request, baseURL string, requestURL string) *h
|
||||
}
|
||||
|
||||
upstreamReq, _ := http.NewRequest(r.Method, url, nil)
|
||||
if len(r.Host) > 0 {
|
||||
upstreamReq.Host = r.Host
|
||||
}
|
||||
|
||||
copyHeaders(upstreamReq.Header, &r.Header)
|
||||
|
||||
upstreamReq.Header["X-Forwarded-For"] = []string{r.RemoteAddr}
|
||||
if len(r.Host) > 0 && upstreamReq.Header.Get("X-Forwarded-Host") == "" {
|
||||
upstreamReq.Header["X-Forwarded-Host"] = []string{r.Host}
|
||||
}
|
||||
if upstreamReq.Header.Get("X-Forwarded-For") == "" {
|
||||
upstreamReq.Header["X-Forwarded-For"] = []string{r.RemoteAddr}
|
||||
}
|
||||
|
||||
if r.Body != nil {
|
||||
upstreamReq.Body = r.Body
|
||||
@ -100,6 +103,8 @@ func forwardRequest(w http.ResponseWriter, r *http.Request, proxyClient *http.Cl
|
||||
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
||||
defer cancel()
|
||||
|
||||
log.Printf("Upstream request to: %s, %+v\n", upstreamReq.URL.Path, upstreamReq)
|
||||
|
||||
res, resErr := proxyClient.Do(upstreamReq.WithContext(ctx))
|
||||
if resErr != nil {
|
||||
badStatus := http.StatusBadGateway
|
||||
|
@ -72,7 +72,7 @@ func Test_buildUpstreamRequest_NoBody_GetMethod_NoQuery(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func Test_buildUpstreamRequest_HasHostHeaderWhenSet(t *testing.T) {
|
||||
func Test_buildUpstreamRequest_HasXForwardedHostHeaderWhenSet(t *testing.T) {
|
||||
srcBytes := []byte("hello world")
|
||||
|
||||
reader := bytes.NewReader(srcBytes)
|
||||
@ -84,12 +84,12 @@ func Test_buildUpstreamRequest_HasHostHeaderWhenSet(t *testing.T) {
|
||||
|
||||
upstream := buildUpstreamRequest(request, "/", "/")
|
||||
|
||||
if request.Host != upstream.Host {
|
||||
t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Host)
|
||||
if request.Host != upstream.Header.Get("X-Forwarded-Host") {
|
||||
t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Header.Get("X-Forwarded-Host"))
|
||||
}
|
||||
}
|
||||
|
||||
func Test_buildUpstreamRequest_HostHeader_Empty_WhenNotSet(t *testing.T) {
|
||||
func Test_buildUpstreamRequest_XForwardedHostHeader_Empty_WhenNotSet(t *testing.T) {
|
||||
srcBytes := []byte("hello world")
|
||||
|
||||
reader := bytes.NewReader(srcBytes)
|
||||
@ -101,8 +101,8 @@ func Test_buildUpstreamRequest_HostHeader_Empty_WhenNotSet(t *testing.T) {
|
||||
|
||||
upstream := buildUpstreamRequest(request, "/", "/")
|
||||
|
||||
if request.Host != upstream.Host {
|
||||
t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Host)
|
||||
if request.Host != upstream.Header.Get("X-Forwarded-Host") {
|
||||
t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Header.Get("X-Forwarded-Host"))
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user