快速认知什么是Nginx服务器+反向代理_nginx



什么是Nginx服务器

是俄罗斯人开发高性能的 Web和 反向代理 服务器,基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接,在高连接并发的情况下,Nginx是Apache服务器不错的替代品;

自由+开源的+高性能+社区活跃,让Nginx成为世界上使用最多的服务器之一。

  • 官网:http://nginx.org/
  • 是一个高性能的[HTTP]和[反向代理]web服务器
  • Nginx代码完全用[C语言]从头写成
  • 支持系统:Mac/Windows/Linux


目前市场上 阿里、腾讯、百度等,全球反向代理服务器中排名,据统计,世界上每3个网站中就有一个使用Nginx,用途有很多种,比如反向代理服务器、文件服务器、静态资源服务器、业务网关、支持多种协议https、POP3等等,功能强大,高性能-支持单机千万级连接强大的第三方库支持,加特别多的第三方模块,让Nginx一举成为服务器的佼佼者。


单机到集群分布式架构来看Nginx充当的角色

光这样讲大家肯定不明白为啥要用Nginx是吧,那我们就从"上古时代"的系统演进和大家说下Nginx可以帮我们解决的问题吧。


基本大家学习系统都是从单节点进行一个讲解,好比我们学校学的学生管理系统,或者开发了一个电商小型的系统。这是一个单机应用。这个请求的链路是从前端请求后端接口,再通过后端读取数据库,把对应的数据通过页面展示出来。


快速认知什么是Nginx服务器+反向代理_nginx_02


我们这一个后端应用的话,好比是个电商系统。包含的功能模块有用户模块,订单模块,商品模块,库存模块等等。

我们这个后端应用部署在一台机器上面。如果这个机器挂了,那我我们这个电商系统就挂了,用户就请求不到我们这个数据。


为了避免单点故障,我们会部署多几台这样的机器,如果某个机器挂了。就可以避免由于某一台机器挂了,导致整个系统不可用。

好比你去银行取钱只有一个人工窗口,对应的服务人员由于急事出差没来。大家都在排队,如果能开多几个这样的一样的窗口,那就可以避免这种问题。我们把同个应用部署到多几台机器,同时对外提供服务的方式叫做”集群“;

集群的话可以解决很多问题,比如可以避免单点故障、给对应的服务器进行减压分流等


类似下面的后端应用部署多几台机器,这就是个集群。但这样的话也有个问题,每个应用都有自己独有的ip,用户他应该请求我们哪一台机器呢?


快速认知什么是Nginx服务器+反向代理_服务器_03


这个选择后端哪个节点,选择的策略是怎样的?如果某一个节点挂了,那用户他能否及时的感知到,然后请求不分配给这个应用?大家可以假想一下。如果是你是设计这样的一个中间件,你会怎么去设计?在Nginx没有出来之前这个可以由前端那边进行定时轮询,比如一次请求Ip1, 一次请求ip2轮流切换。


这样做是没问题了,但是如果你的后端业务很多那你是不是每一次的时候针对这个业务都要进行开发这样的一个轮询策略。单一个很简单的轮询策略是不够的,有些请求他在某个节点梳理很慢,有些请求在某个节点处理很快,那这样的话就容易造成请求的分配不均匀。


像这种的话,我们称为负载均衡策略。可以是轮询,也可以是跟根据ip固定的分到某一个后端节点,也可以根据请求的最短响应时间进行动态的分配,也可以根据应用的权重进行分配,能力多的分配请求多一点。


这类负载均衡策略跟我们后装的应用没有很大的关系,比如你这个后端应用可以是一个电商系统,也可以是一个在线教育平台,也可以是一个管理系统。

如果我们可以把这个负载均衡的选择策略单独做一个中间件,那就可每一个系统都直接复用,就不用每一次都有前端那边进行开发.


快速认知什么是Nginx服务器+反向代理_nginx_04


Nginx出现就是为了解决我们刚刚说的这些问题。负载均衡只是它的其中一个应用,它还有更多更强大的应用。

前端请求到我们这个Nginx了,Nginx那边的话会根据对应的负载均衡策略选择我们后端应用的某个节点,把请求转发过去,那这一块的话,我们称之为反向代理。



什么是正向代理服务器和反向代理服务器

关于什么是正向代理服务器跟反向代理服务器,很多人对这一个有点迷糊。

那我们这边来详细讲一下什么是正向代理服务器,什么是反向代理服务器,还有对应的应用场景,这样就可以掌握

这一个也是很常见的面试题,面试官会问,你能否解释一下什么是正向代理服务器,什么是反向代理服务器。


正向代理服务器

  • 它指的是客户端跟目标服务器之间的服务器,客户端向代理发送了一个请求指定目标服务器,然后代理向目标服务器请求并获得内容,返回给我们的客户端,平时说的代理服务器一般就是正向代理服务器。
  • 核心:用户知道自己访问的目标服务器
  • 场景:跳板机、访问原来无法访问的网站, 比如国外的一些站点


快速认知什么是Nginx服务器+反向代理_服务器_05



反向代理服务器(Nginx)

  • 客户端和目标服务器之间的服务器,客户端向代理发送一个请求,然后代理向目标服务器请求并获得内容,并返回给客户端。反向代理隐藏了真实的服务器
  • 核心:客户端不知道要访问的目标服务器是哪台服务器,代理会根据一定的策略选择一个真实的服务器进行请求
  • 场景:访问淘宝,知道访问的域名是taobao.com, 但是后面提供数据的具体是什么域名或ip我们是不知道的。

正向代理我们好理解,但是反向代理这一个的话就比较难理解;


那我举一个生活中的例子,好比我们要去租房子。我们不知道房源在哪里而房屋中介那边就知道。所以我们去租房就需要通过中介让他帮我们去找对应的房子。然后中介也不会把对应房源的那些业主信息给我们,必须要通过他才可以。比如你去看房的时候,中介会联系对应的业主,有些业主忙,他就不能给我们进行看房。有些业主可以,他就可以给我们看房,那这样的话相当于房屋中介他就是个负载均衡的一个角色,也是一个反向代理。他可以选择哪一个房子符合我们的需求以及对对应的业主有空和我们签合同。


快速认知什么是Nginx服务器+反向代理_nginx_06



回顾一下这篇的核心:

  • 我们主要掌握什么是Nginx,它可以解决我们怎样的一个问题;
  • 掌握反向代理服务器跟正向代理服务器的知识,面试很常问哦;
  • 下一篇我们就正式的去安装部署我们这个Nginx以及学更多的内容。