Nginx 高级教程:如何使用 Stream 模块的变量实现动态四层路由

云静同学_6649

云静同学_6649

2026-06-19

881人浏览

原创

nginx stream模块通过ssl_preread机制提取sni/alpn实现四层动态路由,依赖map指令映射变量,支持协议无关、零延迟透传;关键变量仅$ssl_preread_server_name等少数可用,http变量不可用。

nginx 高级教程:如何使用 stream 模块的变量实现动态四层路由

Nginx Stream 模块本身不支持应用层内容解析,但可通过预读机制(如 ssl_preread)提取 TLS 握手信息,并结合 map 指令实现基于 SNI 或 ALPN 的动态四层路由——这不是“解密”,而是对加密流量首包的轻量解析,真正做到了协议无关、零延迟、高并发。

变量来源有限,但关键字段可用
Stream 模块暴露的变量极少,真正可用于动态路由的只有几个:

  • $remote_addr 和 $remote_port:客户端 IP 和端口,适合 IP 哈希或黑白名单
  • $ssl_preread_server_name:需开启 ssl_preread on,从 ClientHello 提取 SNI 域名(HTTPS/gRPC/TLS 服务必备)
  • $ssl_preread_alpn_protocols:ALPN 协议列表,用于区分 HTTP/2、h2、grpc 等
  • $time_iso8601、$hostname 等只读变量,一般不用于路由决策

注意:$host、$request_uri、$http_* 等 HTTP 变量在 stream 中完全不可用——它们属于 http 模块范畴。

用 map 构建动态 upstream 映射
Stream 不支持 if 或 rewrite,必须用 map 预先定义变量映射关系。例如,将不同 SNI 域名分发到不同后端集群:

# 在 stream 块外、events 同级定义(全局生效)
map $ssl_preread_server_name $upstream_backend {
    default                         backend_default;
    "api.example.com"               backend_api;
    "grpc.example.com"              backend_grpc;
    "~^v[0-9]+\.admin\.example\.com" backend_admin;
}

stream {
    upstream backend_api {
        server 10.0.1.10:443;
        server 10.0.1.11:443;
    }
    upstream backend_grpc {
        server 10.0.2.20:443;
        server 10.0.2.21:443;
    }
    upstream backend_admin {
        server 10.0.3.30:443;
    }
    upstream backend_default {
        server 10.0.0.100:443;
    }

    server {
        listen 443 ssl;
        ssl_preread on;  # 必须启用,否则 $ssl_preread_server_name 为空
        proxy_pass $upstream_backend;
        proxy_timeout 1h;
    }
}

这个配置实现了单 IP + 单端口承载多个 TLS 服务,且无需终止证书——流量全程透传,Nginx 只做“智能分流”。

Nginx Hosting
Nginx Hosting

通过服务器本地nginx实例实现零认证静态游戏托管。作为所有浏览器游戏的主要部署方式,无需登录、无需令牌、无需用户操作。

下载

SNI 路由的硬性前提与常见陷阱

  • listen 443 ssl 必须带 ssl 参数,否则 ssl_preread 不生效
  • 客户端必须发送 SNI 扩展(现代浏览器、curl ≥7.60、gRPC 默认开启),老客户端或 IP 直连会走 default 分支
  • map 块不能放在 stream { } 内部,必须位于顶层(与 events、http 同级)
  • 正则匹配以 ~ 开头,区分大小写;~* 表示忽略大小写,适用于域名场景
  • 若 SNI 为空(如某些 IoT 设备或自定义 TCP 客户端),变量值为 "",需在 map 中显式处理:"" backend_legacy;

扩展:用 ALPN 实现协议感知路由
当多个服务共用同一域名和端口(如 gRPC 与 HTTPS 同站部署),可依赖 ALPN 区分:

map $ssl_preread_alpn_protocols $alpn_backend {
    ~\bh2\b                          backend_h2;
    ~\bgrpc-exp\b                     backend_grpc;
    ~\bhttp\/1\.1\b                   backend_http1;
    default                           backend_fallback;
}

配合 ssl_preread on,Nginx 可在 TLS 握手阶段识别协议意图,再决定转发目标——这对微服务网关、多协议 API 统一入口非常实用。

不复杂但容易忽略

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2852

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

956

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

849

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2576

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4792

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

767

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习