![使用 NGINX 中的标头变量转发流量](https://linux22.com/image/768531/%E4%BD%BF%E7%94%A8%20NGINX%20%E4%B8%AD%E7%9A%84%E6%A0%87%E5%A4%B4%E5%8F%98%E9%87%8F%E8%BD%AC%E5%8F%91%E6%B5%81%E9%87%8F.png)
我正在使用 NGINX(nginx
Docker 镜像)作为反向代理,并希望使用/ context$host
中的变量将流量转发到传入请求的标头参数中定义的特定主机。配置如下:stream
server
Host
events {
}
stream {
log_format log_stream '$remote_addr [$time_local] $protocol'
'$status $bytes_sent $bytes_received $session_time';
access_log /var/log/nginx/access.log log_stream;
error_log /var/log/nginx/error.log;
server {
resolver 8.8.8.8 ipv6=off;
listen 127.0.0.1:18443;
proxy_pass $host:443;
}
}
启动时出现错误:
[emerg] 1#1: unknown "host" variable
根据nginx 文档应该填充此变量。您知道如何在服务器指令中使用它来转发流量吗?我可以使用具有指定主机名/地址的其他标头参数来转发流量吗?
答案1
您的意图似乎是通过 nginxstream
模块传递 TLS 连接。如果您想根据 TLS 标头的 SNI 字段定位不同的目的地,则需要使用以下配置:
map $ssl_preread_server_name $destination {
host1.example.com backend1;
host2.example.com backend2;
default backend3;
}
stream {
upstream backend1 {
server 192.168.100.1:443;
}
upstream backend2 {
server 192.168.100.2:443;
}
upstream backend3 {
server 192.168.100.3:443;
}
server {
listen 127.0.0.1:443;
proxy_pass $destination;
}
}