小编Pav*_*mov的帖子

为什么正确的基于 HAProxy SNI 的路由需要“tcp-request content Accept”前端指令?

我最近尝试在 HAProxy 上设置基于 SNI 的路由以进行 mongodbmongodb+srv协议连接。

我让它工作了,但直到我把

tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
Run Code Online (Sandbox Code Playgroud)

在我的前端配置中它开始正常工作

如果没有这些(或仅使用其中之一),大约 70% 的请求都会出现零星的连接重置。请注意,有时连接确实成功建立。

根据http://cbonte.github.io/haproxy-dconv/2.0/configuration.html#4-tcp-request%20content

基于内容的规则按照其确切的声明顺序进行评估。如果没有规则匹配或没有规则,则默认操作是接受内容。对于可以插入的规则的数量没有具体限制。

所以它应该在默认情况下工作。

要么我缺少一些基本的 TCP 概念,要么缺少一些特定的 Mongo 连接细节。但我注意到几乎每个人在使用基于 SNI 的路由时都定义了相同的规则,因此它对于大多数人来说一定是有意义的。

工作 HAProxy 配置:

    frontend fe_mongo-nonprod
      bind :27017
      tcp-request inspect-delay 5s
      tcp-request content accept if { req_ssl_hello_type 1 }

      acl mongoAtlas-01 req_ssl_sni -i host1.mongodb.net
      acl mongoAtlas-02 req_ssl_sni -i host2.mongodb.net
      acl mongoAtlas-03 req_ssl_sni -i host3.mongodb.net
      use_backend be_mongo-nonprod if mongoAtlas-01 || mongoAtlas-02 || mongoAtlas-03

    backend be_mongo-nonprod …
Run Code Online (Sandbox Code Playgroud)

haproxy sni

3
推荐指数
1
解决办法
1582
查看次数

标签 统计

haproxy ×1

sni ×1