如果你刚接触 Nginx,可能只知道它能做 HTTP 反向代理和 Web 服务器。但其实从 Nginx 1.9.0 版本开始,官方引入了一个强大的功能模块 —— Stream 模块。这个模块允许 Nginx 处理 TCP 和 UDP 流量,实现数据库代理、游戏服务器转发、DNS 负载均衡等非 HTTP 协议的场景。
本文将带你从零开始,详细讲解如何配置 Nginx 的 stream 块,即使你是完全的小白,也能轻松上手!
Nginx Stream 模块 是 Nginx 的一个核心扩展模块,用于处理四层(传输层)的 TCP 和 UDP 流量。与传统的 http 块不同,stream 块不解析应用层协议(如 HTTP、FTP),而是直接在传输层进行转发或负载均衡。
常见应用场景包括:
大多数现代 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 端口的请求,会被轮询转发到后端两个数据库服务器。
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; }} 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。通过本文,你应该已经掌握了 Nginx stream模块 的基本用法。无论是做 Nginx TCP代理、Nginx UDP负载均衡,还是更复杂的 Nginx流式配置,现在你都有了坚实的基础。
记住:Stream 模块让 Nginx 不再局限于 Web 服务,而是成为真正的全协议流量网关。快去试试吧!
关键词提示:本文涉及的核心 SEO 关键词包括:Nginx stream模块、Nginx TCP代理、Nginx UDP负载均衡、Nginx流式配置。
本文由主机测评网于2025-11-28发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025111020.html