nginx加Trojan保持多网站

于 2023-03-23 发布

关于保持nginx监听443端口、用stream转发流量给trojan的文章有很多,本篇只是记录一些关键点。

首先是nginx的stream的配置,map其实只需要配置专门给trojan的那一条就行,其他的(就是正常的其他网站应用)用default统一匹配就行。以下配置参考程小白

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
stream {
    # TLS SNI 识别,根据域名分流
    map $ssl_preread_server_name $backend_name {
        trojan的域名 127.0.0.1:trojan端口;
        # 域名都不匹配情况下的默认值
        default 127.0.0.1:正常的其他网站应用的ssl端口;
    }

    # 监听 443 并开启 ssl_preread
    server {
        listen 443 reuseport;
        listen [::]:443 reuseport;
        proxy_pass  $backend_name;
        ssl_preread on;
    }
}

但是多数文章教的都是fallback到本地80端口的一个静态网页上,没有教怎么fallback给另一个https网页。比如我想让不匹配的流量都转发给我这个服务器上的一个正常的https站来处理,其实就只需要对nginx的default server(一般监听在80端口负责重定向http的请求到https)做一个简单的更改:

1
2
3
4
5
6
location / {
if ( $host = 'trojan的域名' ) {
     return 302 https://另一个域名;
}
    return 301 https://$host$request_uri;
}

这个if就把trojan的fallback过来的直接重定向给https站去处理了。

目录