WebSocket 在 tcp 模式下不能与 HAProxy 一起工作

WebSocket not working with HAProxy in tcp mode

在此处考虑此 HAProxy 配置:

global
    chroot /var/lib/haproxy
    user haproxy
    group haproxy

defaults
    timeout connect 10s
    timeout client 50s
    timeout server 50s

frontend fe_https_tomcat
    mode tcp
    bind *:443 ssl crt /path/cert.pem alpn h2,http/1.1
    default_backend be_tomcat

backend be_tomcat
    mode tcp
    server localhost localhost:8081 check

我遇到的问题是 WebSocket 似乎无法通过。我的猜测是在 tcp 模式下一切都会通过。好像没有...:-)

当正在建立 WebSocket 连接时,服务器响应错误 403

请注意,使用以下 http 模式设置,WebSocket 就可以正常工作:

frontend fe_http_8080
    mode http
    bind *:8080
    default_backend be_tomcat_8080

backend be_tomcat_8080
    mode http
    server localhost localhost:8081 check

请注意,我需要 tcp 模式才能使 http/2 正常工作。

问题最终与 HAProxy 无关,而是与 Spring 中的 WebSocket 设置有关。 这修复了它:

-registry.addHandler(webSocketHandler, "/ws");
+registry.addHandler(webSocketHandler, "/ws").setAllowedOrigins("*");