nginx 反向代理及负载均衡策略

正向代理:代理服务器对客户端的进行代理
反向代理:代理服务器对http服务器做代理

代理服务

先用社会生活中我们常见的场景解释一下代理:

租房代理 or 中介

很多有房人士想将自己闲置的房子出租,但是他们大部分都还有其它更赚钱的事情要忙,并且他们自己住的房子和闲置的房子也不在同一个地方。因此并不愿花时间接待并带领每一位想要看房子的租客到自己闲置的房子那里去看房,也不愿花时间对租客的各种问题做解答。

于是就出现了租房代理或者中介,他们专门负责带领租客看房子、解答租客的问题,虽然租客的主要目标即住房服务是房主提供的,但是其它诸如带看、解答问题等这些事情都是代理或者中介提供的。

代理与中介也有区别,代理一般只负责带看,租房合同一般还是租客与房东直接签,代理只从房东那里收取带看费用。
中介一般是先从房东手中将房子租下来,付给房东较低的租金。而以更高的租金将房子租给租客,租客是同中介签订租房合同。

产品代理商

工厂能生产产品,但是通常情况下,产品的使用者并不是从工厂厂家直接买到的产品,而是从一些或者商场、超市、小卖店或者购物平台上买到的产品。

虽然主要功能提供者——产品,是工厂生产的。但是售卖服务是商超或者网络平台提供的。

例如淘宝上一些店铺,有些店铺并不从工厂进货、也无需设立仓库,只是将商品信息挂在平台上,并负责解答有意向的购买者的一些问题,如果淘宝用户下单,其实产品还是从工厂直接发货的,只是售卖服务由店铺人员负责。

编程中的代理模式

借鉴代理服务这个概念,可以将代理模式理解为:通过代理服务,对原功能进行增强,提供更适合需求的服务。

代理模式通常用于要对很多不同的业务功能做相同的增强功能时,如面向切面的编程的应用场景:
日志功能:记录所有业务方法的调用、参数、执行时间等
权限功能:对所有请求做权限过滤、拦截,确保每个业务方法的调用是有权限的用户操作的。

Nginx服务器提供的正向代理与反向代理功能

正向代理

fanqiang访问一些国外网站即正向代理。

反向代理

Nginx服务器对多个http服务器做代理,客户端会对Nginx代理服务器发出请求,nginx再将请求转发到真正能处理请求的其中一台http服务器上,服务器处理完请求后将资源或者处理结果响应给nginx,nginx再将响应信息返回给客户端。

Nginx反向代理服务做了哪些增强

负载均衡

Nginx的负载均衡功能是指:当客户端请求量非常大时,nginx将请求相对均衡地转发到各个http服务器上,使得每个http服务器所处理的请求数量都和其它http服务器处理的请求量差不多。

均衡策略

  • 内置的策略有:轮询、加权轮询、IP hash,内置的策略被编译进了Nginx内核,使用时直接做相关的参数配置即可。
  • 扩展的策略:一些第三方模块提供了hash、fair等扩展策略,扩展的策略需要将第三方模块手动编译到Nginx内核。

轮询
假如有http服务器1-5,则nginx会将自己接到的第1个请求转发到服务器1,第2个请求转发到服务器2…第6个请求再转发到服务器1,第7个请求转发到服务器2…

加权轮询
在轮询策略的基础上,再结合用户为每个http服务器配置的处理请求的权重数据,做转发。以如下http服务器及权重数据为例:http服务器1 权重0.6; http服务器2 权重0.2 ; http服务器3 权重0.2;则nginx会将接到的第1-3请求均转发到服务器1,当接到第4个请求时会转发到服务器2,第5个请求转发给服务器3,第6-8个请求转发给服务器1 …

加权轮询适用于各个http服务器性能不均等的情况,例如轻中某个http服务器内存、CPU数目等都比其他http服务器大,则可以为其配置大的权重值。

IP hash
对发出请求的客户端的IP地址进行hash,然后根据hash值将请求散列到不同的http服务器上去。
**特点:**同一个客户端的所有请求都会被转发到同一个http服务器上去,可以避免考虑前端用户的session在后端多个节点上共享的问题。

url hash
对请求的url做hash,然后根据hash值散列转发到不同的http服务器上去。
特点所有客户端的url相同的请求都会被转发到同一个http服务器上去。如果有对某url请求的结果使用缓存,那么此策略能提高缓存性能,同时也能解决session问题。
缺点:如果某http服务器出现异常,nginx无法自动排除该节点。(通常情况下,nginx将一个请求转发到某http服务器后,如果服务器返回5xx,nginx会将请求再次转发,直到有正常服务的http服务器处理了这个请求,在此过程中,nginx会记录并排除掉不能正常提供服务的http服务器。)

fair
fair模块会将请求转发给最近负载最小的http服务器上去。负载大小是根据响应时间来判断的。

这种方式适用于有些请求的计算任务量非常大,而有些请求的计算任务量非常小的情况。

缓存

nginx提供了两种类型的缓存功能:

  • Proxy_cache相关指令集提供反向代理时,对http服务器返回的结果进行URL缓存
  • FastCGI_cache相关指令集提供fast cgi动态程序进行缓存。

清除缓存

常用的第三方模块ngx_cache_purge提供了清除指定的URL缓存的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值