文章目录
一.四层代理原理
在OSI七层模型中,从下往上分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
本文中所指的四层与七层分别为:
四层传输层的Tcp/Udp
七层应用层的Http
4层代理
用的是NAT技术。NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,请求进来的时候,nginx修改数据包里面的目标和源IP和端口,然后把数据包发向目标服务器,服务器处理完成后,nginx再做一次修改,返回给请求的客户端。
7层代理
需要读取并解析http请求内容,然后根据具体内容(url)然后转发到相应的服务器,转发的过程是:建立和目标机器的连接,然后转发请求,收到响应数据在转发给请求客户端。
简单来说,就是四层收到客户端请求后,不解析请求内容,直接修改包内的IP和端口进行转发;而七层需要解析包内的数据,判断是否需要转发,再进行转发
四层的转发效率比七层的效率高的多,但是仅支持TCP/UDP协议,不支持http协议或者https协议
二.配置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
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 -t 检测配置文件是否有误
重启服务
systemctl restart nginx
三.测试
输入网址192.169.48.10:8080进行访问
使用三台IP访问,测试服务器是否进行负载均衡
若使用一台机器访问,因为客户端与服务器是使用四层进行连接,需要经过三次握手与四次挥手才会进行连接与断开请求,所以在进行不断刷新时页面时没有任何变化的,打开三个页面,每过一段时间(服务器与客户端断开连接)进行一次刷新,此时会重新发起三次握手进行连接请求,此时页面会有变化,也就是服务器进行了四次均衡转发
四.总结
1.四层负载均衡仅能转发TCP/IP协议、UDP协议,通常用来转发端口
2.四层走的是linux内核态,七层走的是linux用户态
3.因四层代理是直接转发,不查看请求内容,也不进行过滤,所以不利于安全管理,在实际生产中,四层转发常在内网中使用;