使用 NGINX 中的标头变量转发流量

使用 NGINX 中的标头变量转发流量

我正在使用 NGINX(nginxDocker 镜像)作为反向代理,并希望使用/ context$host中的变量将流量转发到传入请求的标头参数中定义的特定主机。配置如下:streamserverHost

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;
    }
}

相关内容