细品nginx

对nginx不熟悉,但是想必这个行业的人对apache很是熟悉吧!

Nginx的产生

Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。

REST 即表述性状态传递,它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现

然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个 Web 服务器有着各自鲜明的特点。

Apache 的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。
它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。

不支持高并发的服务器。在 Apache 上运行数以万计的并发访问,会导致服务器消耗大量内存
操作系统对其进行进程或线程间的切换也消耗了大量的 CPU 资源,导致 HTTP 请求的平均响应速度降低
这些都决定了 Apache 不可能成为高性能 Web 服务器,轻量级高并发服务器 Nginx 就应运而生了

俄罗斯的工程师 Igor Sysoev,他在为 Rambler Media 工作期间,使用 C 语言开发了 Nginx

由于以下这几点,所以,Nginx 火了

1、Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接。

2、高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊!集思广益啊!)。

3、Nginx 是一个跨平台服务器,可以运行在 Linux、Windows、FreeBSD、Solaris、AIX、Mac OS 等操作系统上。

4、这些优秀的设计带来的极大的稳定性

配置解析

nginx配置文件主要分为四部分,main(全局设置),server(主机设置),upstream(上游服
务器设置,主要为反向代理、负载均衡相关配置),location(URL 匹配特定位置后的设置)
main的指令会影响其它指令!
他们之间的关系:server 继承 main,location 继承 server;upstream 既不会
继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。

main
nginx 在运行时与具体业务功能(比如 http 服务或者 email 服务代理)无关的一些参数,
比如工作进程数,运行的身份等
在这里插入图片描述
server
http服务上支持若干虚拟 主机,每个主机都有自己的配置,它们相互通过监听地址或者端口来区分
在这里插入图片描述
upstream
这个模块通过一个简单的调度算法来实现客户端 IP 到后端服务器的负载均衡,upstream
后接负载均衡器的名字,后端 realserver 以 host:port options; 方式组织在 {} 中。如果后端被
代理的只有一台,也可以直接写在 proxy_pass 。
在这里插入图片描述
location
http 服务中,某些特定的 URL 对应的一系列配置项
请求转向 backend 定义的服务器列表,即反向代理,对应 upstream 负载均衡器如上图所示。也可以
proxy_pass http://ip:port

Nginx 的用武之地

Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAPPOP3SMTP 代理服务器。
Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

关于代理

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;此时就涉及到两个角色,一个是被代理角色,一个是目标角色。

被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店,客人到 adidas 专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是 adidas 厂家,目标角色就是用户。

正向代理

在反向代理之前,先了解一下正向代理也是大家常见的代理模式是怎么回事!

讲个生活中例子,我们平时不能直接去访问外网,只能通过FQ(找代理服务器)方式去访问,然后将数据返回给我们。
这就是一个正向代理的模式,最大的特点就是客户端明确了自己要访问的服务器地址;服务器只清楚请求来至于那个代理服务器,不清楚来自于那个客户端,这样客户端信息就被隐藏了,如下图所示;
在这里插入图片描述
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的 IP 地址,还有代理程序的端口如下图。
在这里插入图片描述
总结来说:正向代理,“它代理的是客户端”,是一个位于客户端和原始服务器(Origin Server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)。
然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理

正向代理的用途:
1、访问原来无法访问的资源,如 Google。

2、可以做缓存,加速访问资源。(类似于负载均衡url_hash调度算法会根据URL访问固定服务器,可以在其作为静态服务器时候提高缓存效率

3、对客户端访问授权,上网进行认证。

4、代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。

反向代理

假设某个网站每天同时有很多人去访问,这是单个服务器已经满足不了用户,此时就会出现大家熟悉的分布式部署;部署多台服务器提供给用户,这时候就可以直接用nginx进行反向代理实现,并且通过封装 Nginx 和其他的组件之后起了个高大上的名字:Tengine。
有兴趣的童鞋可以访问 Tengine 的官网查看具体的信息:

http://tengine.taobao.org/

那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图(我把服务器和反向代理框在一块,同属于一个环境,后面我有介绍)
在这里插入图片描述
通过图,然后就可以很直观的 了解,多个客户端同时请求nginx反向代理服务器,然后服务器按照一定规则转发给业务处理服务器,客户端请求是明确的,但是通过nginx反向代理服务器转发后就不知道自己是那台服务器来处理的,这就是和正向服务器的区别之一;并不知道自己访问的是那个服务器,隐藏了服务器的信息。

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

项目场景

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在同一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向代理服务器,反向代理了多台真实的业务处理服务器。
在这里插入图片描述

负载均衡

我们已经明确了所谓代理服务器的概念,那么接下来,Nginx 扮演了反向代理服务器的角色,它是依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?

nginx代理服务器接受到了客户端的请求数量,也就是负载数量,会按照一定的规则进行转发到不同的服务器,均衡每个服务器的请求量,也就是负债均衡。

负载均衡分为硬件负载和软件负载两种,硬件负载成本高但是数据稳定性、安全性有很好的保障。

Nginx 支持的负载均衡调度算法方式如下

负载均衡策略
目前 Nginx 服务器的 upstream 模块支持 6 种方式的分配:
在这里插入图片描述
1、weight 轮询(默认):请求按照顺序逐一分配到不同服务器,即使中途有服务器挂掉,nginx也会剔除该服务器,让请求不受影响。
这种方式可以给服务器设置权重值,让请求侧重于某个服务器(硬件比较好的)/下图是weight结合了轮询。
在这里插入图片描述
2、ip_hash
指定负载均衡器按照基于客户端 IP 的分配方式,这个方法确保了相同的客户端的请求一
直发送到相同的服务器,以保证 session 会话。这样每个访客都固定访问一个后端服务器,可以
解决 session 不能跨服务器的问题
在这里插入图片描述
3、least_conn
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使
它们的负载大致相同;但是有些请求占用的时间很长,会导致其所在的后端负载较高。这种情
况下 least_conn 这种方式就可以达到更好的负载均衡效果。
配置示例
在这里插入图片描述
注意:
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况

4、fair(第三方)
智能调整调度算法,动态的根据后台服务器接受到请求和响应的时间进行均匀分配。

响应时间短处理效率高的服务器分配到请求的概率高,反之效率低,另外值得一提的是它是上面涉及算法的优点的集合

注意:nginx并不支持fair算法,如果要使用这种调度算法,请安装 upstream_fair 模块。

5、url_hash:
按照访问的 URL 的 hash 结果分配请求,每个请求的 URL 会指向后端固定的某个服务器,可以在 Nginx 作为静态服务器的情况下提高缓存效率

同样要注意 Nginx 默认不支持这种调度算法,要使用的话需要安装 Nginx 的 hash 软件包。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值