fix missing url.Host forward

This commit is contained in:
Umputun
2021-04-17 13:11:10 -05:00
parent 34c1510c8c
commit bbbd24dd53
2 changed files with 16 additions and 4 deletions

View File

@@ -21,6 +21,7 @@ func Test_Main(t *testing.T) {
port := chooseRandomUnusedPort()
os.Args = []string{"test", "--static.enabled",
"--static.rule=*,/svc1, https://httpbin.org/get,https://feedmaster.umputun.com/ping",
"--static.rule=*,/svc2/(.*), https://echo.umputun.com/$1,https://feedmaster.umputun.com/ping",
"--dbg", "--logger.stdout", "--listen=127.0.0.1:" + strconv.Itoa(port), "--signature"}
done := make(chan struct{})
@@ -62,11 +63,21 @@ func Test_Main(t *testing.T) {
assert.Equal(t, 200, resp.StatusCode)
body, err := ioutil.ReadAll(resp.Body)
assert.NoError(t, err)
assert.Contains(t, string(body), `"Host": "127.0.0.1"`)
assert.Contains(t, string(body), `"Host": "httpbin.org"`)
}
{
client := http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(fmt.Sprintf("http://127.0.0.1:%d/bas", port))
resp, err := client.Get(fmt.Sprintf("http://127.0.0.1:%d/svc2/test", port))
require.NoError(t, err)
defer resp.Body.Close()
assert.Equal(t, 200, resp.StatusCode)
body, err := ioutil.ReadAll(resp.Body)
assert.NoError(t, err)
assert.Contains(t, string(body), `echo echo 123`)
}
{
client := http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(fmt.Sprintf("http://127.0.0.1:%d/bad", port))
require.NoError(t, err)
defer resp.Body.Close()
assert.Equal(t, http.StatusBadGateway, resp.StatusCode)

View File

@@ -151,11 +151,12 @@ func (h *Http) proxyHandler() http.HandlerFunc {
Director: func(r *http.Request) {
ctx := r.Context()
uu := ctx.Value(contextKey("url")).(*url.URL)
r.Header.Add("X-Forwarded-Host", uu.Host)
r.Header.Set("X-Origin-Host", r.Host)
r.URL.Path = uu.Path
r.URL.Host = uu.Host
r.URL.Scheme = uu.Scheme
r.Header.Add("X-Forwarded-Host", uu.Host)
r.Header.Add("X-Origin-Host", r.Host)
r.Host = uu.Host
h.setXRealIP(r)
},
Transport: &http.Transport{