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

一篇文章了解Nginx是什么以及它能做什么_0

时间:2023-03-16 20:15:54 科技观察

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