1、概述
Nginx是一款开源的,高性能的Http和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,也可以作为反向代理进行负载均衡的实现。
2、反向代理和正向代理
所谓代理其实可以理解为一个代表或者一个渠道,如房产中介,他被代理的角色就是各类房主,目标角色就是购房者或租房者,当有购房者前来访问时,他就根据购房者的需求指定某一套房。
与之对应的就是正向代理,正向代理最大的特点就是客户端非常明确要访问的服务器地址,而服务器只清楚请求来自于哪个代理服务器,而不清楚哪个具体的客户端,例如:我们要访问某个国外的网站,通过浏览器是无妨访问的,我们必须通过某个代理服务器,将请求发送给代理服务器,代理服务器去访问国外的网站然后将访问到数据传递给我们。
反向代理举例
例如某东网站,每天同时访问的人数爆满,单个服务器就不能满足日益增长的人数,此时就出现了分布式部署,通过多台服务器解决访问人数到达极限的问题,这一问题大多数网站就使用Nginx进行反向代理实现,也就是分布式集群操作。
当有多个客户端给服务器发送请求时,nginx服务器在接收到请求之后,按照一定的规则分发给后端的业务处理服务器进行处理,此时请求的来源也就是客户端是明确的,但请求具体是哪台服务器处理就是不明确了,nginx扮演的是一个反向代理的角色。
所以反向代理主要用于服务器集群式分布式部署,对外隐藏了服务器的信息。
问:一台服务器可以配置两个Nginx?
理论上是可以的,通过安装不同的nginx到不同的位置
并且两个nginx的配置文件中设置的监听端口不能冲突
可以同时开启多个nginx
但不建议这样做,一般是通过server指令添加多个虚拟主机,而不是启动多个nginx
3、负载均衡
Nginx扮演了反向代理服务器的角色,它是根据什么样的规则进行请求分发的?不同的应用场景,分发的规则是否可以控制?
我们把客户端发送的、nginx反向代理服务器接收到的请求数量称为负载量
请求数量按照一定的规则进行分发到不同的服务器处理规则称为均衡规则
所以将服务器接收到的请求按照规则分发的过程称为负载均衡。
负载均衡-----硬件负载(价格昂贵成本高,但数据安全性有很好的保障)
-----软件负载(利用现有的技术结合主机硬件实现的一种消息队列分发机制)
Nginx支持的负载均衡的调度方式:
1、weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
2、ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
3、fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
4、url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包。