nginx介绍: nginx(engine x)是一个跨平台,高性能,轻量级,稳定性高,并发性好,开源的Http和反向代理的web服务器,是由俄罗斯的工程师Igor Sysoev,在为Rambler Media工作期间,使用C语言开发的。
nginx的主要功能:
一、代理(正向,反向)
正向代理:是用来代理的是客户端,代客户端发出请求,客户端很清楚要访问的服务器地址,服务器只清楚请求是来自哪个代理服务器的,而不清楚来自哪个具体的客户端,正向代理模式隐藏了真实客户端的信息。 客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口 举个例子:就像是有时候我们需要访问国外的服务器,但是身处国内客户端是无法通过浏览器访问的,这时我们就需要一个“中间服务器”进行访问,这个“中间服务器”就是“正向代理服务器”,我们通过“正向代理服务器”去访问国外的网站,然后“正向代理服务器”将访问到的数据传递给我们,此时,客户端和正向代理服务器是同属于一个环境下的。
反向代理:是用来代理服务器的,代理服务器接收客户端发来的请求,然后将请求转发给内部网络的服务器集群,并从服务器上得到结果并返回给客户端。客户端此时访问的就是代理服务器,它不需要知道代理服务器具体访问哪个服务器。 客户端是不知道代理的存在的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问 图解:这里我只描述一台服务器和一台客户端的行为
二、负载均衡
1.定义: 客户端发送的、Nginx反向代理服务器接收到的请求数量按照一定的规则进行分发到不同的服务器执行的过程就是负载均衡。它多在高并发情况下使用。主要是为了减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高数据的吞吐量。 2.负载均衡又分为硬件负载均衡和软件负载均衡,硬负载成本较高,但数据的稳定性安全性等等有非常好的保障;软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。 图解如下
nginx可使用的负载均衡策略如下:
轮询(默认,常用):接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。权重: 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。ip_hash(常用):每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。fair(第三方):智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。url_hash(第三方):按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。三、 动静分离 动静分离是指将客户端访问的静态资源和动态资源分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。可以将静态资源缓存,动态资源跳相应的后台服务器进行处理。