Skip to content

Commit d1be558

Browse files
committed
Add X-Forwarded-Host for http proxy
1 parent ff7c485 commit d1be558

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

ingress/origin_proxy.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ func (o *httpService) RoundTrip(req *http.Request) (*http.Response, error) {
4040

4141
if o.hostHeader != "" {
4242
// For incoming requests, the Host header is promoted to the Request.Host field and removed from the Header map.
43+
// Pass the original Host header as X-Forwarded-Host.
44+
req.Header.Set("X-Forwarded-Host", req.Host)
4345
req.Host = o.hostHeader
4446
}
4547
return o.transport.RoundTrip(req)

ingress/origin_proxy_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ingress
33
import (
44
"context"
55
"fmt"
6+
"io/ioutil"
67
"net"
78
"net/http"
89
"net/http/httptest"
@@ -118,7 +119,9 @@ func TestHTTPServiceHostHeaderOverride(t *testing.T) {
118119
w.WriteHeader(http.StatusSwitchingProtocols)
119120
return
120121
}
121-
w.Write([]byte("ok"))
122+
// return the X-Forwarded-Host header for assertions
123+
// as the httptest Server URL isn't available here yet
124+
w.Write([]byte(r.Header.Get("X-Forwarded-Host")))
122125
}
123126
origin := httptest.NewServer(http.HandlerFunc(handler))
124127
defer origin.Close()
@@ -141,6 +144,10 @@ func TestHTTPServiceHostHeaderOverride(t *testing.T) {
141144
require.NoError(t, err)
142145
require.Equal(t, http.StatusOK, resp.StatusCode)
143146

147+
respBody, err := ioutil.ReadAll(resp.Body)
148+
require.NoError(t, err)
149+
require.Equal(t, respBody, []byte(originURL.Host))
150+
144151
}
145152

146153
func tcpListenRoutine(listener net.Listener, closeChan chan struct{}) {

0 commit comments

Comments
 (0)