当前位置: 首页 > 科技观察

终于有人把Nginx解释清楚了,图文并茂的讲解!

时间:2023-03-21 21:27:09 科技观察

我想你一定听说过Nginx,如果你没听说过,那你一定听说过它的“对等”Apache!Nginx的产生Nginx是一种类似于Apache的Web服务器。基于REST架构风格,以统一资源标识符(URI)或统一资源定位符(UniformResourcesLocator)URL为通信基础,通过HTTP协议提供各种网络服务。但这些服务器在设计之初受限于当时的用户规模、网络带宽、产品特性等环境,其定位和发展方向各不相同。这也使得每个网络服务器都有自己鲜明的特点。Apache的发展周期很长,是无可争议的世界第一服务器。它有很多优点:稳定、开源、跨平台等等。它存在的时间太长了,在它出现的那个时代,互联网行业远不如现在。所以它被设计成一个重量级的。它不支持高并发服务器。在Apache上运行数万个并发访问会导致服务器消耗大量内存。操作系统在进程或线程之间的切换也会消耗大量的CPU资源,导致HTTP请求的平均响应速度下降。这些都决定了Apache无法成为高性能的web服务器,轻量级高并发服务器Nginx应运而生。俄罗斯工程师IgorSysoev,他在RamblerMedia工作期间用C语言开发了Nginx。Nginx一直作为web服务器为RamblerMedia提供优质稳定的服务。然后,IgorSysoev开源了Nginx代码并给了它一个自由软件许可证。因为以下几点,Nginx火了:Nginx使用事件驱动的架构,使其能够支持数百万的TCP连接。高度的模块化和自由软件许可使得第三方模块层出不穷(这是一个开源的时代)。Nginx是一个跨平台的服务器,可以运行在Linux、Windows、FreeBSD、Solaris、AIX、MacOS等操作系统上。这些优秀的设计带来了极大的稳定性。Nginx的用武之地Nginx是一个免费、开源、高性能的HTTP服务器和反向代理服务器;它还是一个IMAP、POP3、SMTP代理服务器。Nginx可以作为HTTP服务器发布网站,Nginx可以作为反向代理实现负载均衡。关于代理说到代理,首先要明确一个概念。所谓代理,就是一个代表,一个渠道;这个时候涉及到两个角色,一个是agent的角色,一个是target的角色。代理角色通过这个代理访问目标角色以完成某些任务的过程称为代理操作过程;就像生活中的专卖店,当顾客在阿迪达斯专卖店购买一双鞋时,专卖店就是代理商,而代理商的角色就是阿迪达斯制造商。目标角色是用户。在正向代理讲反向代理之前,我们先了解一下正向代理。正向代理也是大家最常接触到的代理模式。我们将从两个方面来谈谈正向代理的处理方式,从软件方面来解释一下什么是正向代理。在如今的网络环境中,如果我们由于技术需要,想要访问一些国外的网站,这时候你会发现我们无法通过浏览器访问某个位于国外的网站。这时候大家可能会使用一个操作FQ来访问。FQ方式主要是找一个可以访问国外网站的代理服务器。我们向代理服务器发送请求,代理服务器访问国外网站,然后将访问的数据进行传输。给我们!上述代理方式称为正向代理。正向代理最大的特点是客户端非常清楚要访问的服务器地址;服务器只知道请求来自哪个代理服务器,而不知道请求来自哪个具体的客户端;转发代理模式掩盖或隐藏真实的客户信息。先看一个示意图(我把客户端和正向代理框在一起,属于同一个环境,后面会介绍):客户端必须架设正向代理服务器,当然前提是知道转发代理服务器的IP地址,并且有一个代理端口。如下图:综上所述:正向代理,“itproxiestheclient”,是一个位于客户端和原服务器(OriginServer)之间的服务器,为了从原服务器获取内容,客户端发送一个代理到代理请求并指定目标(原始服务器)。然后代理将请求转发给源服务器,并将获得的内容返回给客户端。客户端必须进行一些特殊设置才能使用正向代理。正向代理的目的:访问以前无法访问的资源,比如谷歌。它可以被缓存以加速对资源的访问。授权客户端访问并在访问Internet时进行身份验证。代理可以记录用户访问记录(上网行为管理),对外界隐藏用户信息。反向代理了解什么是正向代理。下面继续看反向代理的处理方法。比如我国某宝网站,每天同一时间访问该网站的访问量呈爆炸式增长。单台服务器远远不能满足越来越多的人。购买欲望。这时候,出现了一个熟悉的名词:分布式部署;即通过部署多台服务器来解决访问人数限制的问题。某宝网站中的大部分功能也是直接使用Nginx作为反向代理来实现的,并且在封装了Nginx等组件之后,有了一个高大上的名字:Tengine。感兴趣的童鞋可以访问Tengine官网查看具体信息:http://tengine.taobao.org/那么反向代理是如何实现分布式集群运行的呢,我们先来看一个示意图(我把服务器和反向一起代理,属于同一个环境,后面会介绍):通过上图可以清楚的看到,Nginx服务端在收到多个客户端向服务端发送的请求后,按照一定的规则分发到后台业务处理服务器进行处理。这时候请求的来源,也就是客户端,是很清楚的,但是并不清楚这个请求是由哪个服务器处理的。Nginx扮演着反向代理的角色。客户端不知道代理的存在,反向代理对外是透明的,访问者不知道自己访问的是代理。因为客户端不需要任何配置就可以访问。反向代理,“itproxiestheserver”,主要用于服务器集群分布式部署的情况,反向代理隐藏了服务器的信息。反向代理的作用:为了保证内网的安全,通常使用反向代理作为公网访问地址,Web服务器为内网。负载均衡,通过反向代理服务器来优化网站的负载。项目场景通常,我们在运营一个实际的项目时,正向代理和反向代理很可能存在于同一个应用场景中。转发代理代表客户端访问目标服务器的请求。目标服务器为反向单利服务器,反向代理多个真实业务处理服务器。具体拓扑图如下:我截一张图来说明正向代理和反向代理的区别,如下图:示意图:正向代理中,Proxy和Client属于同一个局域网(方框在图中),隐藏客户端信息。在反向代理中,Proxy和Server属于同一个局域网(图中方框内),隐藏了服务器信息。实际上,Proxy在两个代理中所做的就是代替服务器发送和接收请求和响应,但是从结构上看,它只是交换了左右,所以后面出现的代理方法被称为反向代理人。我们已经明确了所谓的负载均衡代理服务器的概念。接下来,Nginx扮演了反向代理服务器的角色。它使用什么规则来分发请求?针对不同的项目应用场景,能否控制分配规则?这里所说的客户端发送的请求数和Nginx反向代理服务器接收到的请求数就是我们所说的负载。请求的数量是按照一定的规则分配的,处理到不同服务器的规则是一种平衡规则。因此,将服务器收到的请求按规则进行分配的过程称为负载均衡。在负载均衡的实际项目运行过程中,有硬件负载均衡和软件负载均衡两种。硬件负载均衡也叫硬负载,比如F5负载均衡,价格比较贵。但数据的稳定性和安全性得到了很好的保障,移动、联通等公司都会选择硬负载进行运营。考虑到成本,更多的公司会选择使用软件负载均衡。软件负载均衡是利用现有技术结合主机硬件实现的一种消息队列分发机制。Nginx支持的负载均衡调度算法如下:①weightroundrobin(默认):将接收到的请求按顺序一一分配给不同的后端服务器。即使后端服务器在使用过程中崩溃,Nginx会自动将该服务器从队列中移除,不会影响请求的接受。这样就可以为不同的后端服务器设置一个权重值(weight)来调整请求在不同服务器上的分配比例。权重数据越大,被分配到请求的概率越大;权重值主要针对实际工作环境中不同的后端服务器硬件配置进行调整。②ip_hash:每个请求根据发起客户端ip的hash结果进行匹配。在该算法中,固定ip地址的客户端会一直访问同一个后端服务器,也一定程度上解决了集群部署环境下Session的问题。共享问题。③公平:智能调整调度算法,根据后端服务器从请求处理到响应的时间动态均衡分配。响应时间短、处理效率高的服务器被分配请求的概率高,而响应时间长、处理效率低的服务器被分配的请求少。它是一种综合了前两者优点的调度算法。不过需要注意的是,Nginx默认是不支持fair算法的。如果你想使用这个调度算法,请安装upstream_fair模块。④url_hash:根据访问的URL的哈希结果分配请求。每个请求的URL都会指向后端固定的服务器,这样在使用Nginx作为静态服务器时可以提高缓存效率。另请注意,Nginx默认不支持此调度算法。要使用它,你需要安装Nginx的hash包。Web服务器对比几种常用的Web服务器对比如下图: