stream 模块
stream 模块一般用于 tcp/UDP 数据流的代理和负载均衡, 可以通过stream模块代理转发tcp 消息
ngx_stream_core_module 模块由 1.9.0 版提供, 默认情况没有构建此模块, 必须使用 -with stream 配置参数启用
使用场景
实现流量的代理转发, 一些端口服务被限制为活动ip地址, 如: mysql 账户一般将源地址限制为app应用服务器, 而nginx可能同时是web app应用服务器, 开发人员需要验证一些数据库数据问题, 但账户的源地址有限制, 所以通过在nginx中进行流传送, 可以实现从开发终端向mysql 访问
实现流量负载均衡, 有多个tcp或udp 端口服务, 如DNS ,流模块支持负载均衡算法(轮询,最小连接数, ip_hash等)
配置
http{
...
}
stream{
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
access_log ./logs/stream-access.log basic buffer=32k;
# 为了让这个配置简洁, 可以将stream 配置放入到 conf.d 中, 并以 .stream 为后缀
include ./conf.d/*.stream;
}
stream {
server {
listen 8888;
proxy_pass 12.23.34.5:8800;
}
}
# 也可以配合负载均衡进行配置
stream{
upstream load_server{
server localhost:8888;
server localhost:8889;
}
server{
listen 9999;
proxy_pass load_server;
}
}
# 也可以用作ssh , 实现访问内网服务,
如: 有两台主机(A,B),在B中又有虚拟机, A可以访问B, 但是不能访问虚拟机,可以通过代理方式进行连接
A ip: 172.16.2.1;
B ip: 172.16.2.69;
虚拟机ip: 172.16.2.44;
stream{
server{
listen 88;
proxy_pass 172.16.2.44:22; # 通过代理方式实现 ssh 转发
}
}