加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

nginx – 如何在不解密的情况下路由HTTPS加密数据包?

发布时间:2020-12-13 21:14:13 所属栏目:Nginx 来源:网络整理
导读:我们有一个场景,我有两个在虚拟机中运行的应用程序.它们都将在端口80/443上提供流量,但使用不同的主机名.其中一个容器是供应商提供的,它们将解密容器内的HTTPS流量. 我是否可以配置NGINX(或其他工具)根据目标主机名(可能通过SNI)将流量路由到某个VM,而无需解

我们有一个场景,我有两个在虚拟机中运行的应用程序.它们都将在端口80/443上提供流量,但使用不同的主机名.其中一个容器是供应商提供的,它们将解密容器内的HTTPS流量.

我是否可以配置NGINX(或其他工具)根据目标主机名(可能通过SNI)将流量路由到某个VM,而无需解密代理中的数据包?

例如:

myapp1.example.com:443 – > NGINX – > 10.0.0.1:8443(在VM上终止HTTPS)
vendor1.example.com:443 – > NGINX – > 10.0.0.1:9443(在VM上终止HTTPS)

最佳答案
这可以通过使用nginx ngx_stream_ssl_preread_module来实现.这是一个示例配置:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

stream {
    upstream server1 {
        server 192.0.2.125:443;
    }

    upstream server2 {
        server 192.0.2.126:443;
    }

    map $ssl_preread_server_name $upstream {
        hostnames;
        .server1.example.com server1;
        .server2.example.com server2;
    }

    server {
        listen 443;
        listen [::]:443;

        ssl_preread on;
        proxy_pass $upstream;
    }
}

upstream指令用于定义要向其发送流量的服务器.然后映射$ssl_preread_server_name允许nginx从客户端读取请求的SNI值,以正确地将流量定向到右上游框.

如果客户端发送有效的SNI值,这只会起作用.这也允许使用客户端证书进行身份验证,因为在NTERx将流量发送到远程端点之前,TLS连接尚未完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读