@@ -519,10 +519,11 @@ var _ = Describe("HTTP Upstream Suite", func() {
519519 Expect(websocket.Message.Send(ws, []byte(message))).To(Succeed())
520520 var response testWebSocketResponse
521521 Expect(websocket.JSON.Receive(ws, &response)).To(Succeed())
522− Expect(response).To(Equal(testWebSocketResponse{
523− Message: message,
524− Origin: origin,
525− }))
522+
523+ // When PassHostHeader=true (default), the Host should be the client's original request host
524+ Expect(response.Message).To(Equal(message))
525+ Expect(response.Origin).To(Equal(origin))
526+ Expect(response.Host).To(Equal(proxyURL.Host))
526527 })
527528
528529 It("will proxy HTTP requests", func() {
@@ -530,5 +531,45 @@ var _ = Describe("HTTP Upstream Suite", func() {
530531 Expect(err).ToNot(HaveOccurred())
531532 Expect(response.StatusCode).To(Equal(200))
532533 })
534+
535+ It("will proxy websockets respecting PassHostHeader=false", func() {
536+ // Create a new proxy server with PassHostHeader=false
537+ flush := 1 * time.Second
538+ timeout := options.DefaultUpstreamTimeout
539+ upstream := options.Upstream{
540+ ID: "websocketProxyNoPassHost",
541+ PassHostHeader: ptr.To(false),
542+ ProxyWebSockets: ptr.To(true),
543+ InsecureSkipTLSVerify: ptr.To(false),
544+ FlushInterval: &flush,
545+ Timeout: &timeout,
546+ }
547+
548+ u, err := url.Parse(serverAddr)
549+ Expect(err).ToNot(HaveOccurred())
550+
551+ handler := newHTTPUpstreamProxy(upstream, u, nil, nil)
552+ noPassHostServer := httptest.NewServer(middleware.NewScope(false, "X-Request-Id")(handler))
553+ defer noPassHostServer.Close()
554+
555+ origin := "http://example.localhost"
556+ message := "Hello, world!"
557+
558+ proxyURL, err := url.Parse(fmt.Sprintf("http://%s", noPassHostServer.Listener.Addr().String()))
559+ Expect(err).ToNot(HaveOccurred())
560+
561+ wsAddr := fmt.Sprintf("ws://%s/", proxyURL.Host)
562+ ws, err := websocket.Dial(wsAddr, "", origin)
563+ Expect(err).ToNot(HaveOccurred())
564+
565+ Expect(websocket.Message.Send(ws, []byte(message))).To(Succeed())
566+ var response testWebSocketResponse
567+ Expect(websocket.JSON.Receive(ws, &response)).To(Succeed())
568+
569+ // When PassHostHeader=false, the Host should be the upstream server address
570+ Expect(response.Host).To(Equal(u.Host))
571+ Expect(response.Message).To(Equal(message))
572+ Expect(response.Origin).To(Equal(origin))
573+ })
533574 })
534575})