Merge pull request #492 from ibigbug/support-x-forwarded-host
Add X-Forwarded-Host for http proxy
This commit is contained in:
commit
10fc450ae5
|
@ -40,6 +40,8 @@ func (o *httpService) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||||
|
|
||||||
if o.hostHeader != "" {
|
if o.hostHeader != "" {
|
||||||
// For incoming requests, the Host header is promoted to the Request.Host field and removed from the Header map.
|
// For incoming requests, the Host header is promoted to the Request.Host field and removed from the Header map.
|
||||||
|
// Pass the original Host header as X-Forwarded-Host.
|
||||||
|
req.Header.Set("X-Forwarded-Host", req.Host)
|
||||||
req.Host = o.hostHeader
|
req.Host = o.hostHeader
|
||||||
}
|
}
|
||||||
return o.transport.RoundTrip(req)
|
return o.transport.RoundTrip(req)
|
||||||
|
|
|
@ -3,6 +3,7 @@ package ingress
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
@ -118,7 +119,9 @@ func TestHTTPServiceHostHeaderOverride(t *testing.T) {
|
||||||
w.WriteHeader(http.StatusSwitchingProtocols)
|
w.WriteHeader(http.StatusSwitchingProtocols)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.Write([]byte("ok"))
|
// return the X-Forwarded-Host header for assertions
|
||||||
|
// as the httptest Server URL isn't available here yet
|
||||||
|
w.Write([]byte(r.Header.Get("X-Forwarded-Host")))
|
||||||
}
|
}
|
||||||
origin := httptest.NewServer(http.HandlerFunc(handler))
|
origin := httptest.NewServer(http.HandlerFunc(handler))
|
||||||
defer origin.Close()
|
defer origin.Close()
|
||||||
|
@ -141,6 +144,10 @@ func TestHTTPServiceHostHeaderOverride(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, http.StatusOK, resp.StatusCode)
|
require.Equal(t, http.StatusOK, resp.StatusCode)
|
||||||
|
|
||||||
|
respBody, err := ioutil.ReadAll(resp.Body)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, respBody, []byte(originURL.Host))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func tcpListenRoutine(listener net.Listener, closeChan chan struct{}) {
|
func tcpListenRoutine(listener net.Listener, closeChan chan struct{}) {
|
||||||
|
|
Loading…
Reference in New Issue