当前位置:首页 > 服务器技术 > 正文

Nginx Stream模块详解(手把手教你配置TCP/UDP代理与负载均衡)

如果你刚接触 Nginx,可能只知道它能做 HTTP 反向代理和 Web 服务器。但其实从 Nginx 1.9.0 版本开始,官方引入了一个强大的功能模块 —— Stream 模块。这个模块允许 Nginx 处理 TCPUDP 流量,实现数据库代理、游戏服务器转发、DNS 负载均衡等非 HTTP 协议的场景。

本文将带你从零开始,详细讲解如何配置 Nginx 的 stream 块,即使你是完全的小白,也能轻松上手!

Nginx Stream模块详解(手把手教你配置TCP/UDP代理与负载均衡) stream模块 TCP代理 UDP负载均衡 Nginx流式配置 第1张

什么是 Nginx Stream 模块?

Nginx Stream 模块 是 Nginx 的一个核心扩展模块,用于处理四层(传输层)的 TCP 和 UDP 流量。与传统的 http 块不同,stream 块不解析应用层协议(如 HTTP、FTP),而是直接在传输层进行转发或负载均衡。

常见应用场景包括:

  • MySQL / PostgreSQL 数据库代理
  • Redis 缓存集群负载均衡
  • DNS 请求转发(UDP)
  • 游戏服务器 TCP 连接分发

启用 Stream 模块

大多数现代 Linux 发行版中的 Nginx 默认已编译包含 Stream 模块。你可以通过以下命令确认:

nginx -V 2>&1 | grep -o with-stream  

如果输出包含 with-stream,说明模块已启用。如果没有,你可能需要重新编译 Nginx 或安装带 Stream 支持的版本(如 nginx-plus 或某些发行版的 nginx-full 包)。

基本语法结构

stream 块通常写在 Nginx 主配置文件(如 /etc/nginx/nginx.conf)的顶层,与 http 块同级。其基本结构如下:

stream {    upstream backend_db {        server 192.168.1.10:3306;        server 192.168.1.11:3306;    }    server {        listen 3306;        proxy_pass backend_db;    }}  

上面的配置实现了对 MySQL 数据库的 TCP 负载均衡:所有连接到 Nginx 3306 端口的请求,会被轮询转发到后端两个数据库服务器。

详细配置示例

1. TCP 代理(如 MySQL)

stream {    upstream mysql_servers {        server db1.example.com:3306 weight=3;        server db2.example.com:3306;    }    server {        listen 3306;        proxy_pass mysql_servers;        proxy_timeout 1s;        proxy_responses 1;    }}  

2. UDP 代理(如 DNS)

stream {    upstream dns_servers {        server 8.8.8.8:53;        server 1.1.1.1:53;    }    server {        listen 53 udp;        proxy_pass dns_servers;        proxy_timeout 1s;        proxy_responses 1;    }}  

注意:listen 指令后加上 udp 表示监听 UDP 协议。

常用指令说明

指令 说明
listen 监听的端口和协议(默认 TCP,可加 udp
proxy_pass 指定上游服务器组或地址
proxy_timeout 代理连接超时时间
upstream 定义后端服务器组,支持轮询、权重、IP 哈希等

注意事项

  • stream 块不能放在 http 块内部,必须与之同级。
  • 修改配置后,记得使用 nginx -t 测试语法,再重载配置:nginx -s reload
  • 防火墙需放行对应端口(如 3306、53 等)。

总结

通过本文,你应该已经掌握了 Nginx stream模块 的基本用法。无论是做 Nginx TCP代理Nginx UDP负载均衡,还是更复杂的 Nginx流式配置,现在你都有了坚实的基础。

记住:Stream 模块让 Nginx 不再局限于 Web 服务,而是成为真正的全协议流量网关。快去试试吧!

关键词提示:本文涉及的核心 SEO 关键词包括:Nginx stream模块Nginx TCP代理Nginx UDP负载均衡Nginx流式配置