nginx负载均衡

什么是负载均衡

负载均衡是在所有服务端和客户端之间分配工作负载的一种技术,确保没有单个服务器超负荷工作,同时优化资源利用、最大化吞吐量、最小化响应时间,并避免过载。

为什么需要负载均衡

因为当我们的web服务器直接面向用户时,往往要承载着大量的并发请求,单台服务器难以负荷,所以我们可以使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到后端服务器集群中,实现负载的分发。这样就可以大大提升系统的吞吐率、请求性能,降低单个服务器的资源压力。

四层负载均衡

所谓四层负载均衡指的是OSI七层模型中的传输层,那么传输层Nginx已经能支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载均衡,那么它的好处是性能非常快、只需要底层进行应用处理,而不需要进行一些复杂的逻辑。

七层负载均衡

七层负载均衡它是在应用层,那么它可以完成很多应用方面的协议请求,比如我们说的http应用的负载均衡,它可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则,所以在应用层的服务里面,我们可以做的内容就更多,那么Nginx则是一个典型的七层负载均衡

二者的区别

  • 工作层次
    • 四层负载均衡:工作在OSI模型的第四层,即传输层。它主要基于IP地址和端口号(如TCP的源端口、目的端口和IP地址,或UDP的IP地址和端口号)来分配流量。
    • 七层负载均衡:工作在OSI模型的第七层,即应用层。它能够理解应用层协议(如HTTP、HTTPS、FTP等),并根据应用层的内容(如URL、Cookies、HTTP头等)来分配流量。
  • 处理深度
    • 四层负载均衡:处理深度较浅,只检查数据包的IP地址和端口信息,不解析应用层的内容。这使得四层负载均衡器可以快速地处理大量数据包,适用于需要高性能和高吞吐量的场景。
    • 七层负载均衡:处理深度较深,能够解析应用层的内容,从而实现更精细的流量控制和分配。这使得七层负载均衡器可以进行更复杂的决策,如基于URL路径、域名或用户会话等。
  • 适用场景
    • 四层负载均衡:适用于需要快速处理大量并发连接的场景,如大型网站、游戏服务器、视频流服务等。它能够提供高性能的TCP/UDP负载均衡。
    • 七层负载均衡:适用于需要基于应用层内容进行流量控制的场景,如Web应用、API服务、移动应用等。它能够提供更细粒度的流量控制和安全性,如SSL卸载、Web应用防火墙(WAF)等。
  • 性能消耗
    • 四层负载均衡:由于处理深度较浅,通常能够提供更高的性能和更低的资源消耗。
    • 七层负载均衡:由于需要解析应用层的内容,通常需要更多的计算资源,性能可能低于四层负载均衡。
  • 安全性
    • 四层负载均衡:主要提供基本的网络层安全性,如防火墙、访问控制等。
    • 七层负载均衡:能够提供更高级的安全性,如SSL卸载、Web应用防火墙(WAF)、入侵检测和防御系统(IDS/IPS)等。

Nginx负载均衡配置场景

Nginx要实现负载均衡需要用到proxy_pass代理模块配置.

Nginx负载均衡与Nginx代理不同地方在于,Nginx代理的一个location仅能代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池.

Nginx upstream虚拟配置语法
Syntax: upstream name { ... }
Default: -
Context: http

#upstream例
upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
    server backup1.example.com:8080   backup;
}
server {
    location / {
        proxy_pass http://backend;
    }
}
环境准备

Web01服务器上配置nginx

[root@web01 ~]# cd /etc/nginx/conf.d/
[root@web01 conf.d]# vim node.conf
server {
    listen 80;
    server_name node.test.com;
    location / {
        root /code/node;
        index index.html;
    }
}
[root@web01 conf.d]# mkdir -p /code/node
[root@web01 conf.d]# echo "web01 ..." > /code/node/index.html
[root@web01 conf.d]# systemctl restart nginx
Web02服务器上配置nginx
[root@web02 ~]# cd /etc/nginx/conf.d/
[root@web02 conf.d]# vim node.conf
server {
    listen 80;
    server_name node.test.com;
    location / {
        root /code/node;
        index index.html;
    }
}
[root@web02 conf.d]# mkdir -p /code/node
[root@web02 conf.d]# echo "web02 ..." > /code/node/index.html
[root@web02 conf.d]# systemctl restart nginx
配置Nginx负载均衡
[root@lb01 ~]# cd /etc/nginx/conf.d/

[root@lb01 conf.d]# vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

[root@lb01 conf.d]# vim /etc/nginx/conf.d/node_proxy.conf
upstream node {
    server 192.168.88.20:80;
    server 192.168.88.30:80;
}
server {
    listen 80;
    server_name node.test.com;

    location / {
        proxy_pass http://node;
        include proxy_params;
        #否则代理不生效
    }
}

[root@lb01 conf.d]# nginx -t
[root@lb01 conf.d]# systemctl restart nginx

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值