使用“模式 tcp”时如何根据 URI 选择不同的后端

使用“模式 tcp”时如何根据 URI 选择不同的后端

我正在使用 haproxy 版本 1.6.2

我已使用以下配置启用了 http2,我需要使用“模式 tcp”。但是一旦我从“模式 http”切换到“模式 tcp”,我就无法使用 acl path_beg 来

frontend websocks
    mode tcp
    bind *:443 ssl crt /etc/certs/domain.pem alpn h2,http/1.1 ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH; no-sslv3
    timeout client 1h
    acl is_api path_beg /api
    acl is_xmpp path_beg /chat
    use_backend api_backend if is_api
    use_backend xmpp_backend if is_xmpp
    use_backend fe_public_tcp if { ssl_fc_alpn -i h2 }
    default_backend fe_public

fe_public
    server fe1 localhost:444 weight 1 maxconn 4096 check inter 10000 ssl verify none        

fe_public_tcp
    mode tcp
    server fe1 localhost:445

api_backend
    server api1 localhost:9966

xmpp_backend
    server xmpp1 localhost:9955

如何使 path_beg 和 http2 再次工作?或者有没有办法在不使用 tcp 模式的情况下启用 http2?

答案1

要使用协议特定功能,您必须使用适当的模式。模式 tcp 仅允许您访问 tcp 特定功能,但要获得 http 特定功能(如根据 URI 选择后端),您需要使用模式 http。

不幸的是,HTTP/2 与 HTTP/1.x 看起来非常不同,并且目前不支持模式 http,因此您必须使用模式 tcp。这也意味着,只要您想支持 HTTP/2,您就无法根据 URI 做出任何决定。

预计 haproxy 1.7 版将更好地支持 HTTP/2。http://www.haproxy.org/news.html

2015 年 5 月 15 日:HTTP/2 发布!

如今,HTTP/2 正式以 RFC7540 和 RFC7541 的形式存在。... 1.6 版尚不支持 HTTP/2... 我们预计将在今年年底前(1.7 版开发周期内)支持它。

相关内容