看来,在配置 HAProxy 以在 HTTPS 连接上进行主机名路由时,包含一条tcp-request inspect-delay
指令“让 HAProxy 有机会查看连接”至关重要。有没有办法让 NGINX 也这样做,还是我应该开始打包并将整个服务器移至 HAProxy?
(供参考,这个问题来自我之前表达的误解这里)
编辑
迈克尔在评论中说:
他似乎想从客户端的握手尝试中“嗅探” SNI,而不实际终止 TLS 连接,以便做出较低层的连接代理决策并盲目地将有效负载带到后续机器以终止 TLS,因为出于某种原因,他不想要代理上的 TLS 证书和密钥,或者代理根本不执行 TLS - 只需嗅探 SNI 并使用从其内容派生的规则建立向内的 TCP 连接。
理由是我需要后端应用程序中的证书和密钥(有些应用程序出于某种原因需要这些),所以我必须向它们提供这些。在代理中设置它们实际上会使维护工作量增加一倍,并且出错的可能性也会增加。如果我可以不维护代理证书的访问权限,那么我的架构将变得更容易,并减少出错的可能性。
答案1
这ngx_stream_ssl_preread_module
模块从 Nginx 1.11.5 开始可用,并且似乎就是这么做的。
ClientHello
它允许通过变量访问客户端消息中的 SNI 服务器名称$ssl_preread_server_name
。
此信息可用于将 TCP(“流”)连接路由到后端。模块的文档提供了如何执行此操作的示例。