之前的文章写的太简略,更新下增加一些解释
第一版描述太难以理解,今天有空就在后面又增加了一个简单易懂版的。
当使用 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 在