V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
LeviMarvin
V2EX  ›  NGINX

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

  •  
  •   LeviMarvin ·
    LeviMarvin · 2022-08-25 16:28:47 +08:00 · 2880 次点击
    这是一个创建于 846 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直接上配置文件:

    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 预读。

    2 条回复    2023-03-21 22:50:00 +08:00
    ericFork
        1
    ericFork  
       2022-08-26 21:47:31 +08:00
    如果需要保留客户端 IP 还需要折腾一下 transparent
    icaolei
        2
    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 的端口,原理是啥,是在哪个环节暴露的,应该怎么避免这个问题?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2614 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 15:40 · PVG 23:40 · LAX 07:40 · JFK 10:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.