AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 969214
Accepted
András Korn
András Korn
Asked: 2019-05-29 12:13:03 +0800 CST2019-05-29 12:13:03 +0800 CST 2019-05-29 12:13:03 +0800 CST

无需枚举所有后端的通用基于 SNI 的透明 TLS 代理?

  • 772

我的情况是,我必须在一组数千个后端 https 网络服务器前提供一个透明的反向代理,并且列表经常(相对)变化。

我知道我可以haproxy根据客户端与客户端 Hello 一起发送的 SNI 字符串来选择要连接的后端(参见例如,反向代理可以使用 SNI 和 SSL 传递吗?),但似乎我需要枚举所有后端并在配置中单独引用它们;即“如果 SNI 是某某,请与后端交谈”。

相反,我只想从客户端 Hello 中获取 SNI 字符串,在 DNS 中查找它,连接到 IP DNS 提供(在 tcp 端口 443 上),将客户端 hello 中继到服务器,然后在客户端之间继续中继和服务器。

我不想检查流量,也不想在客户端上安装新证书。

haproxy可以做到这一点吗?如果没有,还有什么其他程序可以?

nginx
  • 2 2 个回答
  • 1958 Views

2 个回答

  • Voted
  1. Best Answer
    András Korn
    2019-05-29T12:13:03+08:002019-05-29T12:13:03+08:00

    我最终使用nginx了流 SSL 预读模块。

    配置非常简单:

    stream {
        server {
            resolver 127.0.0.1;
            listen 443;
            ssl_preread on;
            proxy_pass $ssl_preread_server_name:443;
        }
    }
    

    http { }甚至不需要任何块,但nginx如果我省略它,我会出现段错误,所以我http { }在配置中有一个空块。仅加载流模块。resolver需要 nginx 才能在 DNS 中查找后端名称;我在 127.0.0.1 上有一个缓存递归解析器。

    我这样做是为了让所有需要连接到任何后端的客户端都连接到我的 nginx(使用水平分割 DNS 和 DNAT 的组合),并且 nginx 代表他们连接到实际的后端。它对客户完全透明。

    • 4
  2. NickRamirez
    2019-06-14T21:34:54+08:002019-06-14T21:34:54+08:00

    您可以使用 http-request set-var 将 HAProxy 中的变量设置为 SNI 值并使用 var 引用它。

    https://www.haproxy.com/documentation/hapee/1-9r1/onepage/#7.3.2-var

    • 1

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve