ssl_preread_server_name
时间: 2024-01-06 19:04:51 浏览: 32
`ssl_preread_server_name`是一个Nginx的变量,用于提取TLS/SSL协议中的SNI(Server Name Indication)信息。SNI是一个扩展协议,它允许客户端在建立TLS/SSL连接时告知服务器它想要连接的主机名。Nginx可以使用`ssl_preread_server_name`变量从TLS/SSL握手数据中提取该信息,并据此决定将请求转发到哪个后端服务器。这对于实现基于主机名的虚拟主机或负载均衡非常有用。
相关问题
ssl_preread_server_name https代理
当Nginx作为HTTPS代理时,`ssl_preread_server_name`变量可以用于提取客户端请求中的SNI信息,并根据此信息将请求转发到相应的后端服务器。具体实现可以参考以下配置示例:
```
stream {
upstream backend {
server backend1.example.com:443;
server backend2.example.com:443;
}
server {
listen 443;
proxy_pass backend;
ssl_preread on;
map $ssl_preread_server_name $backend_name {
example1.com backend1.example.com;
example2.com backend2.example.com;
# 按需添加更多映射规则
default backend1.example.com;
}
proxy_pass $backend_name;
}
}
```
以上配置实现了一个基于SNI信息的HTTPS代理,当客户端请求到达时,Nginx会提取SNI信息并根据映射规则将请求转发到相应的后端服务器。如果SNI信息无法匹配任何一个映射规则,则默认将请求转发到`backend1.example.com`。
nginx启用ssl_preread_server_name并透传真实客户端IP
启用`ssl_preread_server_name`并透传真实客户端IP需要进行如下配置:
1. 在Nginx配置文件中加入`ssl_preread`相关配置:
```nginx
stream {
map $ssl_preread_server_name $upstream {
mydomain.com backend_mydomain;
myotherdomain.com backend_myotherdomain;
default backend_default;
}
upstream backend_mydomain {
server 192.168.1.1:443;
}
upstream backend_myotherdomain {
server 192.168.1.2:443;
}
upstream backend_default {
server 192.168.1.3:443;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
ssl_preread_server_name on;
proxy_protocol on;
}
}
```
2. 在后端服务器中安装支持`proxy_protocol`的软件,如HAProxy等。
3. 配置后端服务器接收`proxy_protocol`协议,并解析出客户端的真实IP地址。
这样配置之后,Nginx会使用`ssl_preread`预读取客户端的TLS版本和SNI信息,并将请求转发到相应的后端服务器上。同时,Nginx也会通过`proxy_protocol`透传客户端的真实IP地址给后端服务器。