[转帖]Nginx四层负载均衡详解

nginx,四层,负载,均衡,详解 · 浏览次数 : 0

小编点评

**Nginx四层负载均衡原理** Nginx支持四层负载均衡,通过访问某个IP的端口转发至对应的服务器上。 **四层负载均衡配置** `nginx.conf`配置文件中定义了虚拟资源池(upstream)和服务器(server)。每个服务器对应一个虚拟资源池,并通过`proxy_pass`指令将请求转发到相应的服务器。 **四层负载均衡的优点** * **高效:**通过使用虚拟资源池,可以实现多服务器之间的高效负载均衡。 * **可扩展性:**可以轻松扩展到多个服务器。 * **安全性:**可以对请求进行过滤,防止恶意攻击。 **四层负载均衡示例** `nginx.conf`配置文件中定义了以下四层负载均衡配置: ```nginx stream ssh_mysql_stream { upstream mysql_20 { server 172.16.1.20:3306; } server { listen 6666; proxy_pass ssh_mysql_stream; } } ``` 此配置定义了一个名为`ssh_mysql_stream`的虚拟资源池,其中包含一个服务器连接到mysql服务器的端口20。 **四层负载均衡的应用** 四层负载均衡可以用于各种应用程序,例如: * **Web服务器:**可以使用四层负载均衡来提供多个网站的服务。 * **数据库服务器:**可以使用四层负载均衡来提供多个数据库服务器的服务。 * **应用程序服务器:**可以使用四层负载均衡来提供多个应用程序服务器的服务。

正文

https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK

 

简介: Nginx四层负载均衡就是实现通过访问某个ip的端口转发至对应的服务器上,如图当访问10.0.0.5的5555端口就会跳转至web服务器172.1.16.7的22号端口,当访问10.0.0.5的6666端口就会转发到mysql服务器的3306端口,高效的保护了内网的安全。 为什么企业不再使用lvs而选择使用Nginx做负载 1.Nginx既支持四层又支持七层 2.很多企业使用云平台,但是云平台网络环境不支持lvs 3.都是用Nginx方便统一管理

1.Nginx四层负载均衡原理image.png

Nginx四层负载均衡就是实现通过访问某个ip的端口转发至对应的服务器上,如图当访问10.0.0.5的5555端口就会跳转至web服务器172.1.16.7的22号端口,当访问10.0.0.5的6666端口就会转发到mysql服务器的3306端口,高效的保护了内网的安全。

 

为什么企业不再使用lvs而选择使用Nginx做负载

1.Nginx既支持四层又支持七层

2.很多企业使用云平台,但是云平台网络环境不支持lvs

3.都是用Nginx方便统一管理

2.Nginx四层负载均衡配置

一般做四层负载均衡的都是一对一的连接,比如ssh、mysql,明确需要登录某台主机的某个端口来做操作,可以实现一个跳板机

 

注意:四层负载均衡配置stream只能配置一个,也就是说关于四层负载的配置文件只允许有一个

2.1.四层负载均衡语法

stream {      
  upstream name {     //定义虚拟资源池
    server ip:port;
  }
  
  server {    //调用虚拟资源池
    listen port;
    proxy_pass name;    //由于是四层负载所以不用加http://
  }
}

2.2.实例

配置四层负载,实现访问192.168.810.210的6666端口就会访问到172.16.1.20的22号端口

[root@localhost nginx]# mkdir conf.c

在nginx.conf文件中写入这两行,主要要写在events下面http上面,stream与http同级
[root@localhost nginx]# vim nginx.conf
#四层负载
include /etc/nginx/conf.c/*.conf;

[root@localhost conf.c]# vim ssh.conf
stream {
        upstream lb_ssh_20 {
                server 172.16.1.20:22;
        }

        upstream lb_ssh_30 {
                server 172.16.1.30:22;
        }

        upstream lb_ssh_40 {
                server 172.16.1.40:22;
        }

        server {
                listen 6666;
                proxy_pass lb_ssh_20;
        }

        server {
                listen 7777;
                proxy_pass lb_ssh_30;
        }

        server {
                listen 8888;
                proxy_pass lb_ssh_40;
        }
}

[root@localhost conf.c]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.c]# systemctl reload nginx

效果:

666端口image.png7777端口image.png3.Nginx负载均衡TCP实战

需求概述

 

1.通过访问负载均衡的6666端口,实际是后端的web01的22端口在提供服务。

2.通过访问负载均衡的7777端口,实际是后端的web02的22端口在提供服务。

3.通过访问负载均衡的8888端口,实际是后端的web03的22端口在提供服务。

2.通过访问负载均衡的9999端口,实际是后端的mysql的3306端口在提供服务。

3.1.四层负载均衡配置

[root@localhost conf.c]# vim ssh_mysql.conf
stream {
        upstream ssh_20 {         //定义web01的ssh连接池
                server 172.16.1.20:22;
        }
        upstream ssh_30 {         //定义web02的ssh连接池
                server 172.16.1.30:22;
        }
        upstream ssh_40 {         //定义web03的ssh连接池
                server 172.16.1.40:22;
        }
        upstream mysql_20 {         //定义mysql的ssh连接池
                server 172.16.1.20:3306;
        }

        server {
                listen 6666;
                proxy_pass ssh_20;
                proxy_timeout 60s;
                proxy_connect_timeout 30s;
        }

        server {
                listen 7777;
                proxy_pass ssh_30;
                proxy_timeout 60s;
                proxy_connect_timeout 30s;
        }

        server {
                listen 8888;
                proxy_pass ssh_30;
                proxy_timeout 60s;
                proxy_connect_timeout 30s;
        }

        server {
                listen 9999;
                proxy_pass mysql_20;
                proxy_timeout 60s;
                proxy_connect_timeout 30s;
        }
}

[root@localhost conf.c]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.c]# systemctl reload nginx

3.2.效果

  • 1.通过访问负载均衡的6666端口,实际是后端的web01的22端口在提供服务。image.png2.通过访问负载均衡的7777端口,实际是后端的web02的22端口在提供服务。

  • 3.通过访问负载均衡的8888端口,实际是后端的web03的22端口在提供服务。

  • 4.通过访问负载均衡的9999端口,实际是后端的mysql的3306端口在提供服务。

 

与[转帖]Nginx四层负载均衡详解相似的内容:

[转帖]Nginx四层负载均衡详解

https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK 2022-04-14 322举报 简介: Nginx四层负载均衡就是实现通过访问某个ip的端口转发至对应的

[转帖]Nginx(四)负载均衡

一 nginx目录的说明 1 nginx/ 3 |-- client_body_temp 4 |-- conf #这是Nginx所有配置文件的目录,极其重要 5 | |-- fastcgi.conf 'fastcgi相关参数的配置文件' 6 | |-- fastcgi.conf.default #f

[转帖]Nginx系列之nginx四层反向代理

https://cloud.tencent.com/developer/article/2013908 上集说到nginx的http七层代理,其实它工作在OSI七层模型的应用层。由于其可以解析http协议,我们可以根据URI进行请求的分发,具有很大的灵活性,但是协议的解析存在性能的消耗。为了能获取更

[转帖]Nginx中的Rewrite的重定向配置与实践

https://www.cnblogs.com/tugenhua0707/p/10798762.html 阅读目录 一:理解地址重写 与 地址转发的含义。 二:理解 Rewrite指令 使用 三:理解if指令 四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能

[转帖]nginx优化 突破十万并发

一、一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。 2. worker_cpu_affinity 00000001 00000010 0000

[转帖]@nginx多server及使用优化(php)

文章目录​ ​一、nginx多server优先级​​​ ​二、禁止IP访问页面​​​ ​三、nginx的包含include​​​ ​四、nginx 路径的alias和root​​​ ​1.配置​​​ ​2.总结​​​ ​五、nginx的try_files​​​ ​1.配置try_files​​​ ​

[转帖]Nginx Rewrite重写功能

目录 一、rewrite的概述1.1、概述1.2 跳转场景1.3 跳转实现1.4 Rewrite实际场景 二、常用的nginx正则表达式三、rewrite命令3.1 rewrite的语法格式3.2 fiag标记说明 四、location4.1 location大致分为三类4.2 location 常

[转帖]Nginx优化与防盗链

目录 一、配置Nginx隐藏版本号1、第一种方法修改配置文件2、第二种方法修改源码文件,重新编译安装 二、修改Nginx用户与组三、配置Nginx网页缓存时间四、实现Nginx的日志分割五、配置Nginx实现连接超时六、更改Nginx运行进程数七、配置Nginx实现网页压缩功能八、配置Nginx防盗

[转帖]nginx限速

https://www.cnblogs.com/fengzi7314/p/16541440.html 第一步,先创建限制的规则,我这里直接在nginx默认的配置文件目录下配置,如果想自定义,需要在主配置文件添加include xx/xxx/xxx/*.conf配置 [root@node5 nginx

[转帖]Nginx支持WebSocket反向代理

https://www.cnblogs.com/zhengchunyuan/p/12923692.html WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类