我的情况是,我必须在一组数千个后端 https 网络服务器前提供一个透明的反向代理,并且列表经常(相对)变化。
我知道我可以haproxy
根据客户端与客户端 Hello 一起发送的 SNI 字符串来选择要连接的后端(参见例如,反向代理可以使用 SNI 和 SSL 传递吗?),但似乎我需要枚举所有后端并在配置中单独引用它们;即“如果 SNI 是某某,请与后端交谈”。
相反,我只想从客户端 Hello 中获取 SNI 字符串,在 DNS 中查找它,连接到 IP DNS 提供(在 tcp 端口 443 上),将客户端 hello 中继到服务器,然后在客户端之间继续中继和服务器。
我不想检查流量,也不想在客户端上安装新证书。
haproxy可以做到这一点吗?如果没有,还有什么其他程序可以?
我最终使用
nginx
了流 SSL 预读模块。配置非常简单:
http { }
甚至不需要任何块,但nginx
如果我省略它,我会出现段错误,所以我http { }
在配置中有一个空块。仅加载流模块。resolver
需要 nginx 才能在 DNS 中查找后端名称;我在 127.0.0.1 上有一个缓存递归解析器。我这样做是为了让所有需要连接到任何后端的客户端都连接到我的 nginx(使用水平分割 DNS 和 DNAT 的组合),并且 nginx 代表他们连接到实际的后端。它对客户完全透明。
您可以使用 http-request set-var 将 HAProxy 中的变量设置为 SNI 值并使用 var 引用它。
https://www.haproxy.com/documentation/hapee/1-9r1/onepage/#7.3.2-var