NGINX 实现 443 端口复用、SNI 与负载均衡

2022-08-25 16:28:47 +08:00
 LeviMarvin

直接上配置文件:

stream {
    map $ssl_preread_server_name $name {
        www.example.com     home;    # Home Page

        default     defaultpage;
    }

    upstream home {
        server 127.0.0.1:44301;
    }

    upstream defaultpage {
        server 127.0.0.1:44300;
    }

    server {
        listen  443 reuseport;
        listen  [::]:443 reuseport;
        proxy_pass	$name;
        ssl_preread on;
    }
}

通过 NGINX 的 stream ,使用 map 做 SNI ,随后设置上游 upstream 服务器(可以设置多个做负载均衡)即可。

对于上游内的服务器 server ,可以是 NGINX 不同配置文件内的服务器,也可以直接写内部服务。

map 内的 default 用于指定当所有 $ssl_preread_server_name 都匹配不到时的默认服务器。reuseport 表示对监听的端口进行复用,ssl_preread 用于开启 ssl 预读。

2838 次点击
所在节点    NGINX
2 条回复
ericFork
2022-08-26 21:47:31 +08:00
如果需要保留客户端 IP 还需要折腾一下 transparent
icaolei
2023-03-21 22:50:00 +08:00
请教一下,在设置了这个四层代理的情况下,在七层代理的 server 里监听 44301 ,使用 location /home/ 来指向部署的服务。
实际访问时,如果访问 https://domin/home/ 可以正常访问。
但访问 https://domin/home 就会跳转到 https://domin:44301/home/

由于部署的项目本身不支持自定义路径,修改源码工程量太大,已放弃通过 locaion 来指向服务的方式。

不过我还是很想知道,为啥会暴露 44301 的端口,原理是啥,是在哪个环节暴露的,应该怎么避免这个问题?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/875367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX