diff --git a/gateway/handlers/forwarding_proxy.go b/gateway/handlers/forwarding_proxy.go
index 757b2ce40031606b8dd16bccb22d9c2495474eeb..3ec96b90611ab58946568ce6807368e7cb06e051 100644
--- a/gateway/handlers/forwarding_proxy.go
+++ b/gateway/handlers/forwarding_proxy.go
@@ -53,6 +53,9 @@ func buildUpstreamRequest(r *http.Request, url string) *http.Request {
 	}
 
 	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}
diff --git a/gateway/handlers/forwarding_proxy_test.go b/gateway/handlers/forwarding_proxy_test.go
index aaef9b9617c65295375e14cf77093081fcb54cb5..4c314cfda4ba4f2816f03be6fba8fb14b17f72f6 100644
--- a/gateway/handlers/forwarding_proxy_test.go
+++ b/gateway/handlers/forwarding_proxy_test.go
@@ -68,6 +68,40 @@ func Test_buildUpstreamRequest_NoBody_GetMethod_NoQuery(t *testing.T) {
 
 }
 
+func Test_buildUpstreamRequest_HasHostHeaderWhenSet(t *testing.T) {
+	srcBytes := []byte("hello world")
+
+	reader := bytes.NewReader(srcBytes)
+	request, err := http.NewRequest(http.MethodPost, "http://gateway/function?code=1", reader)
+
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	upstream := buildUpstreamRequest(request, "/")
+
+	if request.Host != upstream.Host {
+		t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Host)
+	}
+}
+
+func Test_buildUpstreamRequest_HostHeader_Empty_WhenNotSet(t *testing.T) {
+	srcBytes := []byte("hello world")
+
+	reader := bytes.NewReader(srcBytes)
+	request, err := http.NewRequest(http.MethodPost, "/function", reader)
+
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	upstream := buildUpstreamRequest(request, "/")
+
+	if request.Host != upstream.Host {
+		t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Host)
+	}
+}
+
 func Test_getServiceName(t *testing.T) {
 	scenarios := []struct {
 		name        string