×

nginx通过stream预读域名转发服务

2020-11-25 19:30:49 Falcon

docker 里跑 trojan 和网站,外面装一个 nginx,用 nginx 的 stream,可以预读取域名,根据不同域名转发到不同的 docker,而且也可以转发 SSH,对于外面来说只开一个 443 就够了。

stream {

#$ssl_preread_server_name #通过 SNI 请求的服务器名称
map $ssl_preread_server_name $ssl_server {
deaflut ssh;
trojan.xx.xx trojan_ssl;
web.xx.xx web_ssl;
}
upstream ssh{
    server 127.0.0.1:22;
}

upstream trojan_ssl{
    server 172.18.0.2:443;
}
upstream web_ssl{
    server 172.18.0.3:443;
}

server {
    listen 443;
    ssl_preread on; #允许在预读阶段从 ClientHello 消息中提取信息
    #resolver 8.8.8.8;
    proxy_pass $ssl_server;
    proxy_connect_timeout 5s;
    #error_log /data/logs/stream_ssl_preread.log info;
}

}

参考:https://www.v2ex.com/t/651076#reply27

 

update:20210430

ngx_stream_ssl_preread 模块有三个指令可以取得预读的信息

$ssl_preread_protocol

  • 客户端支持的最高 SSL 协议版本(1.15.2)

$ssl_preread_server_name

  • 通过 SNI 请求的服务器名称

$ssl_preread_alpn_protocols

  • 客户端通过 ALPN(1.13.10)发布的协议列表。这些值用逗号分隔。

参考:https://hi.cellmean.com/p/a53a31f6b570

本文收录于