从根部代理 HTTPS 上的 Websocket - HAProxy

Proxy Websocket on HTTPS from the root - HAProxy

我有一个awsELB,在ELB后面我有一个HAProxy

这是代理配置文件。

cat /etc/haproxy/haproxy.cfg

frontend http-traffic
        bind *:80
    acl is_websocket hdr(Upgrade) -i WebSocket
        redirect scheme https if is_websocket
        use_backend websocket if is_websocket
        default_backend tomcat

frontend https-traffic
        bind *:443 ssl crt /etc/ssl/private/gayan.pem
        reqadd X-Forwarded-Proto:\ https
    acl is_websocket hdr(Upgrade) -i WebSocket
        use_backend websocket if is_websocket
        default_backend tomcat

backend tomcat
        reqirep ^([^\ :]*)\ /(.*)       \ /ImageServlet
        server tc 172.20.135.97:8080

backend websocket
    reqirep ^Host:\ .* Host:\ demos.kaazing.com/echo
    server ws demos.kaazing.com:443/echo ssl verify none

我想做的是,wss://<ELB_A_RECORD> 它应该代理到 demos.kaazing.com/echo websocket。

但是我遇到 403 错误。

我做错了什么吗?

这几乎肯定会导致不正确的 HTTP 请求:

reqirep ^Host:\ .* Host:\ demos.kaazing.com/echo

Host头只是主机头,不是头和路径。错误消息应该是 400 Bad Request,因为这会导致格式错误的请求。

尝试删除该行,然后添加以下内容:

http-request set-header Host demos.kaazing.com
http-request set-path /echo