关于保持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站去处理了。