Nginx 支持多协议混合代理:HTTP/HTTPS/gRPC/WebSocket 走 http 块,TCP/UDP 流量(如 MySQL、Redis)走同级 stream 块;需编译启用 --with-stream,配置 upstream 和 server,支持负载均衡、超时控制与被动健康检查,但不支持 SSL 终止和七层路由。

Nginx 本身是基于 HTTP/HTTPS 协议设计的反向代理与负载均衡器,原生不支持 TCP/UDP 等非 HTTP 协议的混合代理。但通过合理组合 Nginx 的不同模块和架构分层,可以构建支持 HTTP(S)、gRPC、WebSocket、甚至 TCP(如 MySQL、Redis)等多协议的高性能集群网关。关键在于:HTTP 流量走 http 块,非 HTTP 流量走 stream 块,两者共存于同一 Nginx 实例中,统一监听、统一健康检查、统一运维入口。
启用 stream 模块并配置 TCP/UDP 负载均衡
Nginx 自 1.9.0 起内置 stream 模块(需编译时启用,主流发行版默认包含)。它工作在传输层(L4),可代理任意基于 TCP/UDP 的协议:
- 确认模块可用:
nginx -V 2>&1 | grep -o with-stream,若无输出需重装带--with-stream的版本 - 在
/etc/nginx/nginx.conf最外层(与http同级)添加stream块:
stream {
upstream mysql_cluster {
server 192.168.2.10:3306 weight=3;
server 192.168.2.11:3306 backup;
}
upstream redis_cluster {
server 192.168.2.20:6379 max_fails=2 fail_timeout=30s;
}
<pre class='brush:php;toolbar:false;'>server {
listen 3306;
proxy_pass mysql_cluster;
proxy_timeout 1h;
proxy_responses 1;
}
server {
listen 6379;
proxy_pass redis_cluster;
proxy_timeout 1h;
}}
注意:stream 块中不支持 proxy_set_header(无 HTTP 头),但支持连接超时、失败重试、状态检测等基础高可用能力。
HTTP/HTTPS/gRPC/WebSocket 统一走 http 块,按 location 或 server_name 分流
利用 Nginx 的协议识别能力(如 $scheme、$http_upgrade、grpc_pass)实现细粒度路由:
- gRPC 必须使用 HTTPS(或明文 HTTP/2),配置示例如下:
upstream grpc_backend {
server 192.168.1.50:9000;
server 192.168.1.51:9000;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/nginx/ssl/gateway.crt;
ssl_certificate_key /etc/nginx/ssl/gateway.key;
<pre class='brush:php;toolbar:false;'># 匹配 gRPC 请求(Content-Type 为 application/grpc)
location / {
grpc_pass grpc://grpc_backend;
grpc_set_header X-Real-IP $remote_addr;
}}
- WebSocket 需显式升级头,配合
proxy_http_version 1.1和Upgrade透传:
location /ws/ {
proxy_pass http://backend_ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}共享健康检查与动态上游管理
原生 Nginx 不支持对 stream 上游做主动健康检查(如 HTTP 探针),但可通过以下方式增强可靠性:
- 对
http上游:用health_check指令(需 Nginx Plus)或开源版配合第三方模块(如nginx_upstream_check_module) - 对
stream上游:依赖被动检查(max_fails/fail_timeout),或前置部署keepalived + IPVS做 L4 层健康探测 - 生产环境推荐:将 Nginx 作为“协议终结+路由层”,后端真实服务暴露健康端点(如
/health),由外部监控系统(Prometheus+Alertmanager)驱动配置热更新或 DNS 权重调整
性能调优与安全加固要点
多协议混合场景下,资源隔离与连接控制尤为关键:
- 在
events块中启用use epoll;(Linux),提升并发连接处理效率 - 为
http和stream分别设置独立的worker_connections限制,避免 TCP 连接耗尽影响 HTTP 请求 - 禁用不必要的模块(如
autoindex、ssi),减小攻击面 - 对公网入口启用 TLS 1.2+,禁用弱密码套件;内部服务间可启用 mTLS 双向认证



















