记一次SNI分流

因为最近备用服务器到期,导致原本两个监听于443端口的服务需要整合到一台服务器上,本来以为这个方法不太可行,后来在网上找到了Nginx的解决方案,即利用ngx_stream_ssl_preread_module模块进行SNI分流,具体的结构如下:

我们直接将静态网页交给Nginx处理,如果是指定域名就转发到特定的服务。Nginx目前的版本已经内置了这个模块,我们只需要在Nginx的主配置配置文件中添加如下几行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
stream {
map $ssl_preread_server_name $backend_name {
example.com trojan;
default web;
}

upstream web {
server 127.0.0.1:10000;
}

upstream trojan {
server 127.0.0.1:10001;
}

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

而原本监听在443端口的site,配置文件需要修改:

1
2
3
4
5
6
server
{
listen 10000 ssl;
......
port_in_redirect off;
}

我们需要做的就是修改监听端口,并添加port_in_redirect off,因为我们使用的是Nginx来处理文件,而非Docker。不添加这行会导致网站主页能够正常打开,而子页面会自动在域名后加上我们反代的端口,导致无法访问。

参考链接:Trojan 共用 443 端口方案

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。转载需要标明作者,并以超链接的方式指向原文。
  • Copyrights © 2020 Kevin Li
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~