白话理解nginx是什么

什么是nginx?

百度释义如下:
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

不熟悉网络技术或者刚要入门的小白来说,很难懂吧。接下来我以实际生活中的一个例子来说一下我对nginx的理解。

前几天的我喝大了把手机弄丢了,找寻无果的结果下只能重新买一台。网上各种手机,帖子,参数,测评看下来。决定想要买Redmi K30 Ultra。
要买手机,我肯定得去商店买嘛,不论线上的还是线下的商店,他们都是代理,他们代理了我想买的这台手机。
由此引出第一个概念:“代理”。什么是代理?就是一个代表、一种渠道。

正向代理:
买手机这种电子产品肯定首先就是他自身官网的去看,他们家不可能就只有这么一款产品,我明确我是要哪款手机 ,点进官网肯定之后就是搜索我要的这款产品。“我向官网这个代理发起搜索请求——官网搜索后返回我想要的产品信息”这就是一个正向代理的过程。

引申到网络中就很简单了,客户端知道自己想要访问的服务器地址,向代理服务器发起请求,代理服务器帮我们连接到想要大的那个服务器,返回访问到的数据给我们。
在这里插入图片描述

正向代理的用途:
1)、访问原来无法访问到的资源。
2)、可以做缓存,加速访问资源。
3)、对客户端访问授权,上网进行认真。
4)、代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。

反向代理:
小米最恶心的事大家都知道就是没货抢不到,我看中的这款Redmi K30 Ultra也是没货,一直要抢,还TMD抢不到。但是不止小米之间在卖吖。小米天猫旗舰店,小米淘宝授权店,黄牛店。。。。。。一堆呢。我只要上淘宝在首页直接搜索Redmi K30 Ultra,就会跳出一堆的店铺。东西都是同一个东西,但是提供服务的商店就不同了。在这里淘宝App就好像是一个反向代理服务器。
在这里插入图片描述

引申到网络技术中就是客户端(这里一般是多个客户端)给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
在这里插入图片描述

反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载

负载均衡
what?
最近微博上的大瓜不少,什么郑爽代孕、华晨宇有孩子、汪峰成为吃瓜峰向标的…引来大量用户访问微博开吃瓜。一下子来了这么多用户,服务器耐不住啊!(还好今年微博没宕机)
当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

那么~Nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?

这里提到的客户端发送的、Nginx反向代理服务器接收到的请求数量,就是我们说的负载量

请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。

所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。
在这里插入图片描述
Nginx支持的负载均衡调度算法方式如下:

1、weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

2、ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

3、fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。

4、url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值