关于nginx负载均衡和反向代理的讲解
负载均衡
负载均衡是有多台服务器以对称的方式组成一个服务器集合,每台服务器都能具有等价的地位,都可以单独对外提供服务而无需其他服务器辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地相应用户的请求。均衡负载能够平均分配呵护请求到服务器阵列,快速获取数据,解决大量并发访问服务问题。
负载均衡分类
1、DNS负载均衡
在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群

优点:
- 1、使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦
- 2、提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能。
缺点:
- 1、可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长,解析过程中,用户访问网站将失败
- 2、扩展性低:DNS负载均衡的控制权在域名商哪里,无法对其做更多的改善和扩展
- 3、维护性差:也不能反应服务器的当前运行状态;支持算法少;不能区分服务器的差异,(不能根据系统与服务器的状态来判断负载)
2、IP负载均衡
在网络层通过修改请求目标地址进行负载均衡
用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实的服务器地址,然后将请求的目标地址修改为获得的真实的IP地址。
真实服务器处理完成后,相应数据包回到负载均衡服务器,负载均衡服务器,再将数据包源地址修改为自身的IP地址,发送给用户浏览器。

IP负载均衡,真实物理服务器返回给负载均衡服务器,存在两种方式:
- (1)负载均衡服务器在修改目的ip地址的同时修改源地址。将数据包源地址设为自身盘,即源地址转换(snat)。
- (2)将负载均衡服务器同时作为真实物理服务器集群的网关服务器。
优点:
- (1)在内核进程完成数据分发,比在应用层分发性能更好;
缺点:
- (1)所有请求响应都需要经过负载均衡服务器,集群最大吞吐量受限于负载均衡服务器网卡带宽;
3、链路层负载均衡
在通信协议的数据链路层修改mac地址,进行负载均衡。
数据分发是,不修改IP地址,指修改目标的mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器IP地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。
实际处理服务器ip和数据请求目的ip一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。如下图:

优点:性能好
缺点:配置复杂
4、混合型负载均衡
由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这么多服务器集群间再一次负载均衡或集群起来以一个整体向外界提供服务(把多个服务器集群当做一个新的服务器群),从而到达最佳的性能。
方式1,如下图:

以上模式适合有动静分离的场景,反向代理服务器(集群)可以起到缓存和动态请求分发的作用,当时静态资源缓存在代理服务器时,则直接返回到浏览器。如果动态页面则请求后面的应用负载均衡。
方式2,如下图:

以上场景适合动态请求场景。
负载均衡算法
常用的负载均衡算法有,轮询,随机,最少链接,源地址散列,加权等方式;
1 轮询
将所有请求,依次分发到每台服务器上,适合服务器硬件同相同的场景。
优点:服务器请求数目相同;
缺点:服务器压力不一样,不适合服务器配置不同的情况;
2 随机
请求随机分配到各个服务器。
优点:使用简单;
缺点:不适合机器配置不同的场景;
3 最少链接
将请求分配到连接数最少的服务器(目前处理请求最少的服务器)。
优点:根据服务器当前的请求处理情况,动态分配;
缺点:算法实现相对复杂,需要监控服务器请求连接数;
4 Hash(源地址散列)
根据IP地址进行Hash计算,得到IP地址。
优点:将来自同一IP地址的请求,同一会话期内,转发到相同的服务器;实现会话粘滞。
缺点:目标服务器宕机后,会话会丢失;
5 加权
在轮询,随机,最少链接,Hash'等算法的基础上,通过加权的方式,进行负载服务器分配。
优点:根据权重,调节转发服务器的请求数目;
缺点:使用相对复杂;
反向代理
反向代理是指代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就是表现为一个服务器。
到此这篇关于关于nginx负载均衡和反向代理的讲解的文章就介绍到这了,更多相关nginx负载均衡和反向代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For的实现
我们大多数情况下访问服务时,客户端并不是直接访问到服务器的,本文主要介绍了Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For的实现,具有一定的参考价值,感兴趣的可以了解一下2024-03-03
Nginx配置server_name为域名后无法访问的问题解决
在Nginx的配置文件中增加服务器,其server_name设置为域名时,该网址不能正常访问,所以本文给大家介绍了Nginx配置server_name为域名后无法访问的问题解决,需要的朋友可以参考下2024-01-01
详解Nginx防盗链和Nginx访问控制与Nginx解析php的配置
这篇文章主要介绍了详解Nginx防盗链和Nginx访问控制与Nginx解析php的配置的相关资料,这里提供实例帮助大家,学习理解这部分内容,需要的朋友可以参考下2017-08-08
开启Nginx时端口被占用提示:Address already in use
这篇文章主要介绍了开启Nginx时端口被占用提示:Address already in use的解决方法,文中通过两种方法给大家介绍了Nginx的启动、停止与重启 的操作方法 ,需要的朋友可以参考下2018-09-09


最新评论