diff --git a/gateway/handlers/forwarding_proxy.go b/gateway/handlers/forwarding_proxy.go
index 52e0066bd06268fbedfe96ff8e67f3c188e1246b..1bc13634758aaa767637ee6f50f21d9b188ab606 100644
--- a/gateway/handlers/forwarding_proxy.go
+++ b/gateway/handlers/forwarding_proxy.go
@@ -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
diff --git a/gateway/handlers/forwarding_proxy_test.go b/gateway/handlers/forwarding_proxy_test.go
index a5f2eabdba3148b927f1051954f5667d591ab595..b87bcbc7fcf51655b4da8f3c3b1d89a95ac1a31b 100644
--- a/gateway/handlers/forwarding_proxy_test.go
+++ b/gateway/handlers/forwarding_proxy_test.go
@@ -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"))
 	}
 }