diff --git a/http_test.go b/http_test.go index c1242e5f32d006fbdec28ea8b31c6e89ac8dfb74..6fb56af150cc9a4117616976015798b5fb7f6054 100644 --- a/http_test.go +++ b/http_test.go @@ -176,7 +176,7 @@ func TestHTTPPeerInfo(t *testing.T) { t.Fatal(err) } c.SetHeader("user-agent", "ua-testing") - c.SetHeader("origin", "origin.example.com") + c.SetHeader("x-forwarded-for", "origin.example.com") // Request peer information. var info PeerInfo diff --git a/websocket.go b/websocket.go index 76e6aee33d12c57a68d4849c5d0795a935a5c227..42ec51272deafb235fc82c660bd674abc55eea56 100644 --- a/websocket.go +++ b/websocket.go @@ -120,7 +120,6 @@ func wsClientHeaders(endpoint, origin string) (string, http.Header, error) { header := make(http.Header) if origin != "" { header.Add("origin", origin) - header.Add("X-Forwarded-For", origin) } if endpointURL.User != nil { b64auth := base64.StdEncoding.EncodeToString([]byte(endpointURL.User.String())) @@ -177,10 +176,16 @@ func newWebsocketCodec(ctx context.Context, c *websocket.Conn, host string, req } // Fill in connection details. wc.info.HTTP.Host = host + // traefik proxy protocol headers wc.info.HTTP.Origin = req.Get("X-Real-Ip") if wc.info.HTTP.Origin == "" { wc.info.HTTP.Origin = req.Get("X-Forwarded-For") } + // origin header fallback + if wc.info.HTTP.Origin == "" { + wc.info.HTTP.Origin = req.Get("origin") + } + wc.info.RemoteAddr = wc.info.HTTP.Origin wc.info.HTTP.UserAgent = req.Get("User-Agent") wc.info.HTTP.Headers = req // Start pinger.