一、需要Nginx安装stream功能,宝塔的nginx默认是没有安装的,需要改nginx.sh安装文件
- 找到/www/server/panel/install/nginx.sh
- 修改
./configure
开头的哪一行 ${jemallocLD} ${ENABLE_NGX_PAGESPEED} ${ADD_EXTENSION}前面添加--with-stream
二、增加stream配置,这个配置默认级别最高,可以在nginx.conf增加server,也可以增加vhost,宝塔的默认配置文件在/www/server/panel/vhost/nginx/tcp目录下,实例如:
map $ssl_preread_server_name $backend
{
test.com 127.0.0.1:9999;
default 127.0.0.1:9999;
}
server
{
listen 9601;
# 后端服务器的地址和端口
proxy_pass $backend;
}
三、关于配置文件的解释,以下内容来自ChatGPT的对话说明
$ssl_preread_server_name
是一个 Nginx 变量,用于在 SSL 握手前获取客户端请求中的 SNI(Server Name Indication)。SNI 是 TLS/SSL 协议的一部分,用于指示客户端请求的主机名,以便服务器可以根据主机名选择正确的证书进行握手。在
stream
模块中,$ssl_preread_server_name
变量包含客户端请求中的 SNI 值。你可以使用这个值来根据不同的主机名进行条件判断,从而选择不同的后端服务器或执行其他逻辑。以下是一个简单的示例,演示如何使用
$ssl_preread_server_name
进行条件判断:nginxCopy code
stream { map $ssl_preread_server_name $backend { example.com backend_server_ip:backend_server_port; another.example.com another_backend_ip:another_backend_port; default fallback_backend_ip:fallback_backend_port; } server { listen 12345; proxy_pass $backend; } }
在这个例子中,
map
指令将$ssl_preread_server_name
的值映射到相应的后端服务器。如果 SNI 为example.com
,则请求将被代理到backend_server_ip:backend_server_port
;如果是another.example.com
,则会被代理到another_backend_ip:another_backend_port
;否则,使用默认值fallback_backend_ip:fallback_backend_port
。