在操作web的时候常常会遇到一个关键词叫做Nginx代理,或者说在提到负载均衡的时候也会提到这个关键词,但是很久都没有去关注这个是啥

什么是Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器电子邮件(IMAP/POP3)代理服务器Nginx本身是一个web服务器也可以用来做负载均衡反向代理使用,目前使用最多的就是负载均衡。其特点是占有内存少并发能力强nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

这里涉及两个关键词,一个是负载均衡,另一个是反向代理

负载均衡

负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。当服务端涉及多个服务器的时候,每一个服务器所能够接受或者处理数据的能力是不同的,因此负载均衡就是需要根据不同服务器的性能状态分配给不同的服务器不同的数据处理量,实现动态的维护整体工作效率。

负载均衡的主要作用如下:

  • 高并发: 负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。
  • 伸缩性: 添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。
  • 高可用: 负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。
  • 安全防护: 有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。

反向代理

反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

简单来说就是在互联网上的资源需要通过一个中间服务器作为跳板才能将数据正常返回到我们的客户端电脑上,当数据传输面临某些限制或者需要负载均衡的时候就需要这样一个服务器作为数据传输的桥梁。反向代理具有以下特点:

  • 使用反向代理,可以对客户端隐藏服务器的IP地址 。保证内网的安全,阻止web攻击,大型网站通常将反向代理作为公网访问地址,Web服务器是内网。
  • 反向代理服务器可以作为应用层防火墙,为网站提供对基于Web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等。
  • 为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等。
  • 负载均衡,通过反向代理服务器来优化网站的负载。反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上
  • 提高访问速度:反向代理服务器可以对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度。

Nginx使用场景

在实际开发过程当中,以前的时候可能是一个服务器作为服务端。但是伴随着工作业务的扩展,带来一个问题,访问量不够了,需要更多的计算资源。当涉及到添加多台服务器用于处理数据的时候需要考虑到以下几个问题:

  • 多台服务器需要一个统一的出口保证数据不会混乱
  • 多台服务器需要被管理
  • 服务器硬件的差异导致整体工作效率有差异,需要动态调整

而这些问题恰好可以被Nginx解决,在部署过程当中,可以将多台2服务器当中的某一台作为代理服务器,在代理服务器上安装Nginx。

而Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。


轮询指的是后台有多个服务器,代理服务器按照顺序给每一个服务发送请求。而加权轮询则是根据每一个服务器的权重不同,分配不同量级的请求。

并且有一点值得注意的是,网站的资源分为动态资源与静态资源,动态资源是需要通过后台服务器计算的资源,而静态资源是不需要计算的资源,可以直接访问服务器的资源。因此可以在代理服务器上做动静分离操作,静态资源直接访问静态资源对应的服务器,反之亦如此。

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。