加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

Nginx负载均衡--TCP/UDP流

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

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.     } 

负载均衡

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读