Merge pull request #19 from fracklen/trust-forward-host

If forwarded headers are trusted - don't mangle X-Forwarded-Host
This commit is contained in:
Alexander Klizhentas
2015-07-01 13:24:02 -07:00
2 changed files with 6 additions and 1 deletions
+2
View File
@@ -115,6 +115,7 @@ func (s *FwdSuite) TestForwardedHeaders(c *C) {
XForwardedProto: []string{"httpx"},
XForwardedFor: []string{"192.168.1.1"},
XForwardedServer: []string{"foobar"},
XForwardedHost: []string{"upstream-foobar"},
}
re, _, err := testutils.Get(proxy.URL, testutils.Headers(headers))
@@ -122,6 +123,7 @@ func (s *FwdSuite) TestForwardedHeaders(c *C) {
c.Assert(re.StatusCode, Equals, http.StatusOK)
c.Assert(outHeaders.Get(XForwardedProto), Equals, "httpx")
c.Assert(strings.Contains(outHeaders.Get(XForwardedFor), "192.168.1.1"), Equals, true)
c.Assert(strings.Contains(outHeaders.Get(XForwardedHost), "upstream-foobar"), Equals, true)
c.Assert(outHeaders.Get(XForwardedServer), Equals, "hello")
}
+4 -1
View File
@@ -32,9 +32,12 @@ func (rw *HeaderRewriter) Rewrite(req *http.Request) {
req.Header.Set(XForwardedProto, "http")
}
if req.Host != "" {
if xfh := req.Header.Get(XForwardedHost); xfh != "" && rw.TrustForwardHeader {
req.Header.Set(XForwardedHost, xfh)
} else if req.Host != "" {
req.Header.Set(XForwardedHost, req.Host)
}
if rw.Hostname != "" {
req.Header.Set(XForwardedServer, rw.Hostname)
}