设为首页 - 加入收藏 黄石站长网 (http://www.0714zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 发布 过程 为什么 如何
当前位置: 首页 > 快三倍投技巧 > 外闻 > 正文

Nginx负载均衡--TCP/UDP流

发布时间:2019-06-07 05:27 所属栏目:[外闻] 来源:Jyokiyi
导读:负载均衡是指在多个后端服务器之间有效地分配网络流量。 从NGINX Plus R5[1] 版本开始可以代理和负载均衡传输控制协议(Transmission Control Protocol,TCP)通信。TCP是许多流行应用程序和服务的协议,如LDAP、MySQL和RTMP。 从NGINX Plus R9[2]版本开始可

Nginx负载均衡--TCP/UDP流

负载均衡是指在多个后端服务器之间有效地分配网络流量。

从NGINX Plus R5[1] 版本开始可以代理和负载均衡传输控制协议(Transmission Control Protocol,TCP)通信。TCP是许多流行应用程序和服务的协议,如LDAP、MySQL和RTMP。

从NGINX Plus R9[2]版本开始可以代理和负载平衡UDP流量。用户数据报协议(User Datagram Protocol,UDP)是许多流行的非事务性应用程序的协议,如DNS、syslog和RADIUS。

反向代理

基础条件

需要使用ngx_stream_core_module模块,该模块从版本1.9.0开始可用。这个模块在默认情况下是不构建的,需使用--with-stream配置参数来启用它。如下配置:

  1. ./configure??--prefix=/usr/local/nginx?--with-stream?

配置反向代理

配置反向代理,以便NGINX打开资源,将来自客户端的TCP连接或UDP数据报转发到upstream组或代理服务器。

A. 配置反向代理之前,看一下ngx_stream_core_module模块中几个元素的语法:

  • stream块,在配置文件中是顶级块,和http块属于同一级别,语法如下:
  1. Syntax:????stream?{?...?}?
  2. Default:????—?
  3. Context:????main?
  • server块,配置一个服务。在顶级stream{}上下文中为每个虚拟服务器定义一个或多个服务器配置块。语法如下:
  1. Syntax:????server?{?...?}?
  2. Default:????—?
  3. Context:????stream?

listen指令,设置服务器将接受连接的套接字的地址和端口。可以只指定端口。地址也可以是主机名,例如:

  1. Syntax:????listen?address:port?[ssl]?[udp]?[proxy_protocol]?[backlog=number]?[rcvbuf=size]?[sndbuf=size]?[bind]?[ipv6only=on|off]?[reuseport]?[so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];?
  2. Default:????—?
  3. Context:????server?

示例如下:

  1. listen?127.0.0.1:12345;?
  2. listen?*:12345;?
  3. listen?12345;?????#?same?as?*:12345?
  4. listen?localhost:12345;?

listen指令在此默认协议是TCP协议,对于UDP流,需要指定udp参数,如下:

  1. listen?12345?udp;?

B. 使用ngx_stream_proxy_module模块(默认是编译进来的)的proxy_pass指令配置代理,proxy_pass指令语法:

  1. Syntax:????proxy_pass?address;?
  2. Default:????—?
  3. Context:????server?

设置被代理服务器的地址。地址可以定义为一个域名或IP地址和一个端口号:

  1. proxy_pass?localhost:12345;?

或一个UNIX-domain socket路径:

  1. proxy_pass?unix:/tmp/stream.socket;?

C. 如果代理服务器有多个网络接口,可以配置NGINX使用特定的源IP地址去连接upstream服务器。这可能很有用,当一个代理服务器在nginx后面,并配置了接受来自特定IP网络或IP地址范围的连接。

使用ngx_stream_proxy_module模块的proxy_bind指令,其语法:

  1. Syntax:????proxy_bind?address?[transparent]?|?off;?
  2. Default:????—?
  3. Context:????stream,?server?
  4. #此指令在1.9.2版本中开始使用。?

从指定的本地IP地址向被代理服务器发起外部连接。特殊值off取消从上层配置中继承的proxy_bind指令产生的影响,允许系统自动分配本地IP地址。

transparent参数(1.11.0+)允许从一个非本地IP地址发起到被代理服务器的外部连接,例如从一个客户端的真实IP地址:

  1. proxy_bind?$remote_addr?transparent;?

为了使此参数起作用,通常需要使用超级用户权限运行nginx工作进程。 在Linux上,不需要(1.13.8+),就像指定了transparent参数一样,工作进程从主进程继承CAP_NET_RAW功能。 还需要配置核心路由表以拦截来自被代理服务器的网络流量。

示例配置如下:

  1. stream?{?
  2. ????#?...?
  3. ????server?{?
  4. ????????listen????????????127.0.0.1:12345;?
  5. ????????proxy_pass????????backend.example.com:12345;?
  6. ????????proxy_buffer_size?16k;?
  7. ????????#proxy_bind?127.0.0.1:12345;?
  8. ????}?
  9. }?

负载均衡

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章