Nginx之数据流代理stream模块简介和使用

Posted AllenWongFly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx之数据流代理stream模块简介和使用相关的知识,希望对你有一定的参考价值。

转自 http://t.csdn.cn/RV4Hi

一、stream模块简介

  stream模块一般用于TCP/UDP数据流的代理和负载均衡,通过stream模块我们可以代理转发tcp报文。ngx_stream_core_module模块从1.9.0版开始提供。默认情况下,此模块不是构建的,应该使用–with stream配置参数启用它,即我们需要使用./configure --with-stream的方式在编译的时候将stream模块添加进去。stream模块用法和http模块差不多,语法也基本相同。

二、使用场景说明

  stream主要有两个可用场景。一是实现流量的代理转发,这里所说的代理转发是只某些端口服务是有源IP地址限制的,例如mysql账户一般是限制了源地址为应用服务器,nginx可能同时是WEB应用服务器,开发人员需要验证一些数据库数据问题,但是账户源地址有限制,此时通过nginx进行数据流转发就可以实现开发终端到mysql的访问。二是实现流量的负载均衡,我们有多个tcp或者udp端口服务(比如DNS),通过stream模块我们可以实现数据流的负载均衡,支持负载均衡算法包括轮询、最小连接数、ip_hash等。

三、配置示例

0、stream块配置

stream块配置与http块并列,在nginx.conf中配置,可以用include方式将我们配置实例单独配置,方便管理。

stream 
    log_format proxy \'$remote_addr [$time_local] \' \'$protocol $status $bytes_sent $bytes_received \' \'$session_time "$upstream_addr" \' \'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"\';
    access_log /var/log/nginx/tcp-access.log proxy ;
    open_log_file_cache off;
    include /etc/nginx/conf.d/*.stream;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1、tcp端口数据流代理

#cat tcp_3306.stream

############################################################################
### 这是一个tcp 3306端口代理的配置示例
############################################################################
server 
    listen 3306; #需要监听的端口
    proxy_connect_timeout 5s;
    proxy_timeout 30s;
    proxy_pass 192.168.10.151:3306; #需要代理的端口

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、负载均衡配置

#cat load_udp_53.stream

############################################################################
### 这是一个udp 53端口负载均衡的配置示例
############################################################################
upstream mydns 
    hash $remote_addr consistent; #配置ip_hash方式,默认轮询
    server 192.168.10.10:53; #这里配置成要访问的地址和端口
    server 192.168.10.20:53;
    server 192.168.10.30:53; 

server 
    listen 53 udp reuseport; #需要监听的端口,因为udp非可靠传输协议,使用reuseport保证请求分配到统一会话中
    proxy_connect_timeout 5s;
    proxy_timeout 20s;
    proxy_pass mydns;
 

 

 

 

 

nginx之TCP反向代理


  nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译需添加--with-stream配置参数,stream负载均衡官方配置样例

user  nginx;
#user root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

stream{
	upstream mysql{
		server 192.168.1.106:3306 weight=1;
		server 192.168.1.108:3306 weight=1;
	}
        
	server{
		listen 3307;
		proxy_pass mysql;
	}

}

stream 与 http 是一个层级的,放在配置文件最后

本文出自 “” 博客,请务必保留此出处http://jinyudong.blog.51cto.com/10990408/1911524

以上是关于Nginx之数据流代理stream模块简介和使用的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 四层代理之动静分离与负载均衡

nginx之TCP反向代理

nginx之TCP反向代理

nginx之TCP反向代理

CentOS 7.9使用Nginx的stream模块实现内网端口转发

利用nginx的stream模块实现内网端口的转发代理