随着 Nginx 社区版本的 TCP 负载平衡的发布,我想混合使用 OpenVPN 和 SSL 传递数据。 Nginx 知道如何路由流量的唯一方法是通过它们的域名。

 vpn1.app.com ─┬─► nginx at 10.0.0.1 ─┬─► vpn1  at 10.0.0.3
 vpn2.app.com ─┤                      ├─► vpn2  at 10.0.0.4
https.app.com ─┘                      └─► https at 10.0.0.5

我看过TCP guides和 module documentation ,但它似乎没有被很好地引用。如果有人能指出我正确的方向,我将不胜感激。

有关 ServerFault 的相关问题:Can a Reverse Proxy use SNI with SSL pass through?

nginx version: nginx/1.18.0 (Ubuntu) 默认包含此模块,测试成功,只能转发https,同时可以使用cname切换给客户使用,方面后续我们切换ip。SRV记录可以解析端口

最佳答案

 

现在可以通过添加 ngx_stream_ssl_preread module 来实现。在 Nginx 1.11.5 和 ngx_stream_map module 中添加在 1.11.2 添加。

这允许 Nginx 读取 TLS Client Hello 并根据 SNI 扩展决定使用哪个后端。

stream {

    map $ssl_preread_server_name $name {
        vpn1.app.com vpn1_backend;
        vpn2.app.com vpn2_backend;
        https.app.com https_backend;
        default https_default_backend;
    }

    upstream vpn1_backend {
        server 10.0.0.3:443;
    }

    upstream vpn2_backend {
        server 10.0.0.4:443;
    }

    upstream https_backend {
        server 10.0.0.5:443;
    }

    upstream https_default_backend {
        server 127.0.0.1:443;
    }

    server {
        listen 10.0.0.1:443;
        proxy_pass $name;
        ssl_preread on;
    }
}

 

关于基于主机名的 Nginx TCP 转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34741571/

发表评论

邮箱地址不会被公开。 必填项已用*标注