当前位置: 首页 > Linux

什么是nginx

时间:2023-04-06 11:46:53 Linux

Nginx简介Nginx是由俄罗斯程序员IgorSysoev开发的一款高性能Web和反向代理服务器,同时也是一款IMAP/POP3/SMTP代理服务器。在高连接并发的情况下,Nginx是Apache服务器很好的替代品。Nginx的产生Nginx是一种类似于Apache的Web服务器。基于REST架构风格,以统一资源标识符(URI)或统一资源定位符(UniformResourcesLocator)URL为通信基础,通过HTTP协议提供各种网络服务。但是这些服务器在设计之初受限于当时的用户规模、网络带宽、产品特性等环境,定位和发展各不相同,这也使得每一个web服务器都各有特色特征。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角色。被代理角色通过代理访问目标角色完成某些任务的过程称为代理操作过程,就像生活中的专卖店,当顾客在某水果专卖店购买手机时,专卖店是代理,被代理的角色是某个厂商,目标角色是用户。正向代理在当今的网络环境中,如果我们由于技术需要需要访问一些网站,此时我们可以将请求发送给代理服务器,代理服务器会访问该网站,然后将访问到的数据传递给我们。上述代理模式称为正向代理。正向代理最大的特点是客户端非常清楚要访问的服务器地址;服务器只知道请求来自哪个代理服务器,而不知道具体是哪个客户端。正向代理模式屏蔽或隐藏真实的客户端信息。客户端必须设置一个正向代理服务器,当然前提是知道正向代理服务器的IP地址和代理程序的端口。正向代理,代理客户端,是客户端和原始服务器(OriginServer)之间的服务器。为了从原始服务器获取内容,客户端向代理发送请求并指定目标(OriginServer)。然后代理将请求转发给源服务器,并将获得的内容返回给客户端。客户端必须进行一些特殊设置才能使用正向代理(未扩展)。正向代理的作用:访问以前无法访问的资源。它可以被缓存以加速对资源的访问。授权客户端访问并在访问Internet时进行身份验证。代理可以记录用户访问记录(上网行为管理),对外界隐藏用户信息。反向代理了解了什么是正向代理后,我们继续看反向代理是怎么处理的。比如我国某宝网站,每天同时连接该网站的访问量呈爆炸式增长,单台服务器远远不能满足人们日益增长的购买欲望。这时候出现了一个大家耳熟能详的名词:分布式部署,即通过部署多台服务器来解决访问人数限制的问题。某宝网站中的大部分功能也是直接使用Nginx作为反向代理来实现的,并且在封装了Nginx等组件之后,有了一个高大上的名字:Tengine。具体信息可以访问Tengine官网查看:http://tengine.taobao.org/那么反向代理是如何实现分布式集群部署的呢?先看一个示意图(服务器和反向代理框起来,属于同一个环境,后面会展开)。如上图,可以清楚的看到,多个客户端向服务器发送的请求,在被Nginx服务器接收后,按照一定的规则分发到后端业务处理服务器进行处理。这时候请求的来源,也就是客户端,是很清楚的,但是并不清楚这个请求是由哪个服务器处理的。Nginx扮演着反向代理的角色。客户端不知道代理的存在,反向代理对外是透明的,访问者不知道自己访问的是代理。因为客户端不需要任何配置就可以访问。反向代理,作为服务器的代理,主要用于服务器集群分布式部署的情况。反向代理隐藏了服务器的信息。反向代理的作用:为保证内网安全,通常使用反向代理作为公网访问地址,Web服务器为内网。负载均衡,通过反向代理服务器来优化网站的负载。项目场景通常,我们在运营一个实际的项目时,正向代理和反向代理很可能存在于同一个应用场景中。正向代理作为客户端请求访问目标服务器的代理,目标服务器是反向代理。服务器,反向代理多台真实业务处理服务器。具体拓扑图如下所示。正向代理和反向代理的区别如下图所示。从上图可以看出,在正向代理中,Proxy和Client属于同一个局域网(图中方框内),隐藏了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服务器比较如下图所示。根据上面的介绍,nginx是一个轻量级的服务器。建议安装试用。我用的是3A服务器搭建的LNMP。这个过程非常有趣。