基于四层的Nginx负载均衡

文章目录

  • 一.四层代理原理
  • 二.配置Nginx实现四层均衡
  • 三.测试
  • 四.总结

一.四层代理原理

在OSI七层模型中,从下往上分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
本文中所指的四层与七层分别为:
四层传输层的Tcp/Udp
七层应用层的Http

4层代理
用的是NAT技术。NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,请求进来的时候,nginx修改数据包里面的目标和源IP和端口,然后把数据包发向目标服务器,服务器处理完成后,nginx再做一次修改,返回给请求的客户端。

7层代理
需要读取并解析http请求内容,然后根据具体内容(url)然后转发到相应的服务器,转发的过程是:建立和目标机器的连接,然后转发请求,收到响应数据在转发给请求客户端。

简单来说,就是四层收到客户端请求后,不解析请求内容,直接修改包内的IP和端口进行转发;而七层需要解析包内的数据,判断是否需要转发,再进行转发
四层的转发效率比七层的效率高的多,但是仅支持TCP/UDP协议,不支持http协议或者https协议
基于四层的Nginx负载均衡_第1张图片

二.配置Nginx实现四层均衡

在nginx 1.90版本后,新增stream模块,用于Tcp代理和负载均衡
基于上篇文章部署nginx+tomcat动静分离与负载均衡),进行nginx平滑升级添加stream模块

cd /opt/nginx-1.20.2/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-stream

make
注:仅make
killall -3 nginx 停止服务

mv /usr/local/nginx/sbin/nginx   /usr/local/nginx/sbin/nginx.old
#移动原程序并更名,防止升级失败
cp objs/nginx  /usr/local/nginx/sbin/nginx 
#将新安装的文件复制到原程序下,并更名
重新启动服务
systemctl start nginx

基于四层的Nginx负载均衡_第2张图片

vim /usr/local/nginx/conf/nginx.conf
stream {
        upstream server {
	server 192.168.48.13:8080 weight=1;
        server 192.168.48.13:8081 weight=1;
        server 192.168.48.11:8080 weight=1;
	}
	server {
        listen 8080;
        proxy_pass server
	}
}	

基于四层的Nginx负载均衡_第3张图片
基于四层的Nginx负载均衡_第4张图片
nginx -t 检测配置文件是否有误
重启服务
systemctl restart nginx

三.测试

输入网址192.169.48.10:8080进行访问
使用三台IP访问,测试服务器是否进行负载均衡
基于四层的Nginx负载均衡_第5张图片
基于四层的Nginx负载均衡_第6张图片

基于四层的Nginx负载均衡_第7张图片
若使用一台机器访问,因为客户端与服务器是使用四层进行连接,需要经过三次握手与四次挥手才会进行连接与断开请求,所以在进行不断刷新时页面时没有任何变化的,打开三个页面,每过一段时间(服务器与客户端断开连接)进行一次刷新,此时会重新发起三次握手进行连接请求,此时页面会有变化,也就是服务器进行了四次均衡转发
基于四层的Nginx负载均衡_第8张图片

四.总结

1.四层负载均衡仅能转发TCP/IP协议、UDP协议,通常用来转发端口
2.四层走的是linux内核态,七层走的是linux用户态
3.因四层代理是直接转发,不查看请求内容,也不进行过滤,所以不利于安全管理,在实际生产中,四层转发常在内网中使用;

你可能感兴趣的:(nginx,负载均衡,网络)