美文网首页
Nginx核心概念

Nginx核心概念

作者: 微笑的鱼23333 | 来源:发表于2019-12-25 22:24 被阅读0次

1.HTTP代理和反向代理

代理服务和反向代理服务是Nginx服务器作为Web服务器的主要功能之一,尤其是反向代理服务,是应用十分广泛的功能。

在提供反向代理服务方面,Nginx服务器转发前端请求性能稳定,并且后端转发与业务配置相互分离,配置相当灵活。在后面的章节我们可以看到,在进行Nginx服务器配置时,配置后端转发请求完全不用关心网络环境如何,可以指定任意的IP地址和端口号,或其他类型的链接、请求等。

Nginx服务器的反向代理服务功能并不只有这些,它提供的配套功能相当丰富。首先,它支持判断表达式。通过使用正则表达式进行相关配置,可以实现根据不同的表达式,采取不同的转发策略,相关内容将在下一章节中详细阐述。其次,它对后端返回情况进行了异常判断,如果返回结果不正常,则重新请求另一台主机(即将前端请求转向另一后端IP),并自动剔除返回异常的主机。它还支持错误页面跳转功能。

谈到Nginx服务器的反向代理功能的应用,就不能不提到它在解决网络负载、性能方面的一个出色功能,这也是Nginx服务器的另一个重要的能力——负载均衡。

2.负载均衡

负载均衡,一般包含两方面的含义。一方面是,将单一的重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总返回给用户,这样可以大幅提高网络系统的处理能力;第二个方面的含义是,将大量的前端并发访问或数据流量分担到多个后端网络节点上分别处理,这样可以有效减少前端用户等待响应的时间。Web服务器、FTP服务器、企业关键应用服务器等网络应用方面谈到的负载均衡问题,基本隶属于后一方面的含义。因此,Nginx服务器的负载均衡主要是对大量前端访问和流量进行分流,以保证前端用户访问效率。可以说,在绝大多数的Nginx应用中,都会或多或少涉及它的负载均衡服务。

Nginx服务器的负载均衡策略可以划分为两大类:即内置策略和扩展策略。内置策略主要包含轮询、加权轮询和IP hash三种;扩展策略主要通过第三方模块实现,种类比较丰富,常见的有url hash、fair等。

在默认情况下,内置策略会被编译进Nginx内核,使用时只需要在Nginx服务器配置中设置相关参数即可,我们在专门的章节中会详细阐述;扩展策略不会编译进Nginx内核,需要手动将第三方模块编译到Nginx内核。第三方模块的编译技术也留在后文专门讲解。下面简单介绍一下几种负载均衡策略的实现原理。

轮询策略

比较简单,就是将每个前端请求按顺序(时间顺序或者排列次序)逐一分配到不同的后端节点上,对于出现问题的后端节点自动排除。加权轮询策略,顾名思义,就是在基本的轮询策略上考虑各后端节点接受请求的权重,指定各后端节点被轮询到的几率。加权轮询策略主要用于后端节点性能不均的情况。根据后端节点性能的实际情况,我们可以在Nginx服务器的配置文件中调整权值,使得整个网络对前端请求达到最佳的响应能力。

IP hash策略

是将前端的访问IP进行hash操作,然后根据hash结果将请求分配给不同的后端节点。事实上,这种策略可以看作是一种特殊的轮询策略。通过Nginx的实现,每个前端访问IP会固定访问一个后端节点。这样做的好处是避免考虑前端用户的session在后端多个节点上共享的问题。

扩展策略

扩展策略中的url hash在形式上和IP hash相近,不同之处在于,IP hash策略是对前端访问IP进行了hash操作,而url hash策略是对前端请求的url进行了hash操作。url hash策略的优点在于,如果后端有缓存服务器,它能够提高缓存效率,同时也解决了session的问题;但其缺点是,如果后端节点出现异常,它不能自动排除该节点。在实际使用过程中笔者发现,后端节点出现异常会导致Nginx服务器返回503错误。

扩展的第三方模块fair则是从另一个角度来实现Nginx服务器负载均衡策略的。该模块将前端请求转发到一个最近负载最小的后台节点。那么,负载最小怎么判断呢?Nginx通过后端节点对请求的响应时间来判断负载情况。响应时间短的节点负载相对就轻。得出判断结果后,Nginx就将前端请求转发到选中的负载最轻的节点。

3.Web缓存

相信不少读者对Squid有所了解。它在Web服务器领域中是一款相当流行的开源代理服务器和Web缓存服务器。作为网页服务器的前置缓存服务器,在很多优秀的站点中,它被用以缓存前端请求,从而提高Web服务器的性能;而且,它还可以缓存万维网、域名系统或者其他网络搜索等,为一个集体提供网络资源共享服务。

Nginx服务器的Web缓存服务主要由Proxy_Cache相关指令集和FastCGI_Cache相关指令集构成。其中,Proxy_Cache主要用于在Nginx服务器提供反向代理服务时,对后端源服务器的返回内容进行URL缓存;FastCGI_Cache主要用于对FastCGI的动态程序进行缓存。另外还有一款常用的第三方模块ngx_cache_purge也是Nginx服务器Web缓存功能中经常用到的。它主要用于清除Nginx服务器上指定的URL缓存。

到Nginx 0.8.32版本,Proxy_Cache和FastCGI_Cache两部分的功能已经比较完善,再配合第三方的ngx_cache_purge模块,Nginx服务器已经具备了Squid所拥有的Web缓存加速功能和清除指定URL缓存的功能;同时,Nginx服务器对多核CPU的调度比Squid更胜一筹,性能高于Squid,而在反向代理、负载均衡等其他方面,Nginx也不逊于Squid。这使得Nginx服务器可以同时作为负载均衡服务器和Web缓存服务器来使用,基本可以取代Squid。

相关文章

网友评论

      本文标题:Nginx核心概念

      本文链接:https://www.haomeiwen.com/subject/cyphoctx.html