之前的文章写的太简略,更新下增加一些解释
第一版描述太难以理解,今天有空就在后面又增加了一个简单易懂版的。
当使用 Nginx 转发 Trojan 流量时,不能直接基于域名在 7 层(应用层)进行代理和转发数据(就是说不能通过配置server_name来转发流量),这是由于 Trojan 的流量是加密的,并且不符合标准的 HTTP 协议,Nginx 无法在 7 层解析和处理这些流量。因此,必须通过 ssl_preread 模块在 4 层进行代理和转发,这样才能根据 SNI 信息(即客户端在 TLS 握手过程中提供的域名)来决定将流量转发到哪个后端服务。
具体原因和方法总结如下:
-
4 层代理 vs. 7 层代理:4 层代理(传输层代理):Nginx 只处理 TCP 连接,而不深入解析数据内容。它只能基于 IP、端口和 TCP 连接的基本属性来做转发。7 层代理(应用层代理):Nginx 能解析和处理 HTTP/HTTPS 请求的内容,如 URL、头信息等。然而,对于 Trojan 这样的加密协议,Nginx 无法在 7 层解析其内容,因此不能在 7 层基于域名转发 Trojan 流量。
-
ssl_preread的作用:ssl_preread模块允许 Nginx 在 4 层代理中读取 SSL/TLS 握手的初始数据包,从中提取 SNI 信息(域名)。通过这个 SNI 信息,Nginx 可以决定将流量转发到哪个后端服务。例如,你可以通过 SNI 信息判断请求的域名是与 Trojan 服务相关的域名,还是与其他网站相关的域名,然后将流量分别转发到对

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



