前言
百度百科是这样写的
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
但是从Nginx从1.9.0
开始,新增加了一个stream
模块,用来实现四层协议的转发、代理或者负载均衡等。
比如在内网有一个mysql服务,想暴露到公网上去使用,就可以通过nginx代理的方式通过nginx来进行内网Mysql的访问。
也就是说Nginx本来只支持HTTP,添加stream模块后就支持TCP/UDP了。
添加stream模块
查看是否添加该模块
代码语言:javascript复制nginx -V
搜索是否包含--with-stream
,如果包含则已添加过此模块。
如果没有需要编译添加
代码语言:javascript复制./configure --prefix=/opt/apps/nginx --with-stream
make && make install
注意
--prefix=/opt/apps/nginx
是nginx的执行文件位置,根据自己的服务器的实际情况配置。
转发TCP(Mysql)配置
假如Nginx的公网IP为110.119.120.121
,Mysql所在的同一个内网的内网IP为192.168.1.20
#stream配置
stream {
server {
listen 13306;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 192.168.1.20:3306;
}
}
http {
}
这样我们就能通过110.119.120.121:13306
访问到Mysql服务了。
注意
- stream配置项和http同级。
- 不支持不同域名转发不同Mysql的功能。
这样做的好处
- 避免数据库服务器直接暴漏在公网
- 方便数据库秒级切换
UDP负载均衡
下面就是UDP负载均衡的示例
代码语言:javascript复制#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream dns {
server 192.168.111.99:10086;
server 192.168.111.100:10086;
}
server {
listen 192.168.111.98:10086 udp;
proxy_responses 1;
proxy_timeout 20s;
proxy_bind $server_addr:$remote_port;
proxy_pass dns;
}
}