看完这篇还不了解Nginx,那我就哭了!

戳蓝字“CSDN云计算”关注我们哦!
作者 | 蔷薇Nina
责编 | 阿秃

想必大家一定听说过 Nginx,若没听说过它,那么一定听过它的"同行"Apache 吧!


Nginx 的产生

Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。
然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个 Web 服务器有着各自鲜明的特点。
Apache 的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。

它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。

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

Nginx 作为 Web 服务器一直为 Rambler Media 提供出色而又稳定的服务。然后呢,Igor Sysoev 将 Nginx 代码开源,并且赋予自由软件许可证。

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

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

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

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

  • 这些优秀的设计带来的极大的稳定性。

Nginx 的用武之地


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

关于代理

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;此时就涉及到两个角色,一个是被代理角色,一个是目标角色。
被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店,客人到 adidas 专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是 adidas 厂家,目标角色就是用户。

正向代理

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。
在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的。
此时大家可能都会用一个操作 FQ 进行访问,FQ 的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

来看个示意图(我把客户端和正向代理框在一块,同属于一个环境,后面我有介绍):

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的 IP 地址,还有代理程序的端口。

如下图:

总结来说:正向代理,"它代理的是客户端",是一个位于客户端和原始服务器(Origin Server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)。
然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

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

  • 可以做缓存,加速访问资源。

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

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

反向代理

明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我国的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了。
此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题。
某宝网站中大部分功能也是直接使用 Nginx 进行反向代理实现的,并且通过封装 Nginx 和其他的组件之后起了个高大上的名字:Tengine。

有兴趣的童鞋可以访问 Tengine 的官网查看具体的信息:

http://tengine.taobao.org/

那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图(我把服务器和反向代理框在一块,同属于一个环境,后面我有介绍):

通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。
此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx 扮演的就是一个反向代理角色。
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
反向代理,"它代理的是服务端",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
反向代理的作用:
  • 保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网。

  • 负载均衡,通过反向代理服务器来优化网站的负载。

项目场景


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

具体的拓扑图如下:

截了一张图来说明正向代理和反向代理二者之间的区别,如下图:

图解:
  • 在正向代理中,Proxy 和 Client 同属于一个 LAN(图中方框内),隐藏了客户端信息。

  • 在反向代理中,Proxy 和 Server 同属于一个 LAN(图中方框内),隐藏了服务端信息。

实际上,Proxy 在两种代理中做的事情都是替服务器代为收发请求和响应,不过从结构上看正好左右互换了一下,所以把后出现的那种代理方式称为反向代理了。

负载均衡

我们已经明确了所谓代理服务器的概念,那么接下来,Nginx 扮演了反向代理服务器的角色,它是依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?
这里提到的客户端发送的、Nginx 反向代理服务器接收到的请求数量,就是我们说的负载量。
请求数量按照一定的规则进行分发,到不同的服务器处理的规则,就是一种均衡规则。
所以将服务器接收到的请求按照规则分发的过程,称为负载均衡。
负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如 F5 负载均衡,相对造价昂贵成本较高。
但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作。

更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

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

①weight 轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx 会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。
这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率。
权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
②ip_hash:每个请求按照发起客户端的 ip 的 hash 结果进行匹配,这样的算法下一个固定 ip 地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下 Session 共享的问题。
③fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配。
响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少,它是结合了前两者的优点的一种调度算法。
但是需要注意的是 Nginx 默认不支持 fair 算法,如果要使用这种调度算法,请安装 upstream_fair 模块。
④url_hash:按照访问的 URL 的 hash 结果分配请求,每个请求的 URL 会指向后端固定的某个服务器,可以在 Nginx 作为静态服务器的情况下提高缓存效率。
同样要注意 Nginx 默认不支持这种调度算法,要使用的话需要安装 Nginx 的 hash 软件包。

Web 服务器对比


几种常用 Web 服务器对比如下图:





福利
扫描添加小编微信,备注“姓名+公司职位”,入驻【CSDN博客】,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

推荐阅读:
  • 太真实了:程序员等级图鉴

  • 只有程序员才能读懂的三国演义(一)

  • 区块链+“中国制造”:一文看懂区块链如何提升供应链金融活力与效能!

  • AutoML未来可期,工程师的明天何去何从?

  • 乔布斯的简历 120 万被拍卖,HR 看了想打人

  • 揭秘支撑双 11 买买买背后的硬核黑科技!

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迁移学习NLP:BERT、ELMo等直观图解

2018年是自然语言处理的转折点,能捕捉潜在意义和关系的方式表达单词和句子的概念性理解正在迅速发展。此外,NLP社区已经出现了非常强大的组件,你可以在自己的模型和管道中自由下载和使用(它被称为NLP的ImageNet时刻)。…

开发函数计算的正确姿势 —— 爬虫

在 《函数计算本地运行与调试 - Fun Local 基本用法》 中,我们介绍了利用 Fun Local 本地运行、调试函数的方法。但如果仅仅这样简单的介绍,并不能展现 Fun Local 对函数计算开发的巨大效率的提升。 这一次,我们拿一个简单的场景来举例子——…

SonarQube 规则的挂起与激活

文章目录规则添加规则挂起规则添加 规则挂起

内存性能的正确解读

一台服务器,不管是物理机还是虚拟机,必不可少的就是内存,内存的性能又是如何来衡量呢。 1. 内存与缓存 现在比较新的CPU一般都有三级缓存,L1 Cache(32KB-256KB),L2 Cache(128KB-2M…

2019年技术盘点云数据库篇(一):UCloud专家谈云数据库:千锤百炼 云之重器

作者 | 刘丹 出品 | CSDN云计算(ID:CSDNcloud) 公有云逐渐成为企业运行 IT 设施的新趋势,那么作为企业最核心的系统—数据库,数据上云也成为大数据时代的必然选择。对企业来说,数据可视为其命脉&#xff0…

专访阿里云专有云马劲,一个理性的理想主义者

“我的故事都是和团队技术相关的,自己还真没有什么引人入胜的故事。”当马劲被问到能不能多分享些个人经历故事时他笑着说,我们就干脆怀着好奇聊了聊他和阿里云专有云一路走来的故事。 马劲,花名隆猫,阿里云专有云事业部兼企业应用…

80后阿里P10,“关老板”如何带着MaxCompute一路升级?

我是个幸运的人。虽然幸运不能被复制,但是眼光和努力可以。 关涛/关老板,80后的阿里P10,阿里巴巴通用计算平台负责人,阿里巴巴计算平台研究员。12年职场人生,微软和阿里的选择。 关涛的花名取自谐音:观涛。…

【重磅快讯】T11 2019数据智能技术峰会举办,AI将成为行业颠覆者

当前数据的价值日益凸显,已成为重要的生产要素和社会财富。云计算、人工智能、5G等技术的蓬勃发展,带来了智能化时代算力的提升。以数据为“能源”、以技术为“引擎”,才能将数据转化为智能,产生突破局限、跨越发展的力量。11月25…

如何创建一个数据科学项目?

假如你想要开始一个新的数据科学项目,比如对数据集进行简单的分析,或者是一个复杂的项目。你应该如何组织你的项目流程?数据和代码要放在那里?应该使用什么工具?在对数据处理之前,需要考虑哪些方面&#xf…

i 智慧 | IBM存储:全面贯彻新存储的“智慧之道”

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘丹责编 | 阿秃出品 | CSDN云计算(ID:CSDNcloud)随着移动互联网、信息技术等创新发展,数据量呈指数级爆发式增长并表现在多个方面,即规模扩张、结构多元化的数据新…

二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles,手把手教大家如何将阿里云区块链服务与阿里云函数计算服务相结合,并…

Spring项目启动加载xml配置文件替换数据库提高响应速度

文章目录1. pom依赖2. xml配置文件3. 获取参数工具类4. 根据beanId从SpringBootIOC获取类实例工具类5. 测试类6. 浏览器控制台验证1. pom依赖 <properties><!--全局版本控制--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><…

目标检测算法图解:一文看懂RCNN系列算法

在生活中&#xff0c;经常会遇到这样的一种情况&#xff0c;上班要出门的时候&#xff0c;突然找不到一件东西了&#xff0c;比如钥匙、手机或者手表等。这个时候一般在房间翻一遍各个角落来寻找不见的物品&#xff0c;最后突然一拍大脑&#xff0c;想到在某一个地方&#xff0…

不懂数据库的码农不是好程序员!

毋庸置疑&#xff0c;现在是“一切皆数”的时代&#xff0c;放眼目前炙手可热的大数据、人工智能等创新技术&#xff0c;如果没有数据加以支撑&#xff0c;一切的一切将毫无用武之地&#xff0c;更不必谈信息化、智能化and so on&#xff0c;而数据库作为存储和承载数据的重要场…

基于深度学习模型WideDeep的推荐

本实验选用数据为UCI开源数据集&#xff0c;仅用于学习&#xff0c;请勿商用&#xff09; Wide&Deep推荐算法出自一篇论文《Wide&Deep Learning for RecommenderSystems》&#xff0c;Wide&Deep由两部分组成&#xff0c;分别是Wide和Deep。先来说wide&#xff0c;…

RabbitMQ非root用户安装(Linux环境)

文章目录一、用户操作1. 创建fismq用户并设置密码2. 给fismq用户设置目录权限二、Erlang 操作2.1. Erlang下载2.2. Erlang 上传并解压2.3. 验证rabbitmq依赖是否安装2.4. 安装rabbitmq依赖2.5. Erlang 编译、安装2.6. Erlang 配置环境变量2.7. Erlang 验证三、RabbitMQ3.1. Rab…

深度学习目标检测系列:faster RCNN实现|附python源码

目标检测一直是计算机视觉中比较热门的研究领域&#xff0c;有一些常用且成熟的算法得到业内公认水平&#xff0c;比如RCNN系列算法、SSD以及YOLO等。如果你是从事这一行业的话&#xff0c;你会使用哪种算法进行目标检测任务呢&#xff1f;在我寻求在最短的时间内构建最精确的模…

mysql冷热数据LRU_浅析MySQL的lru链表

一、简述传统的lru链表lru&#xff1a;least recently used相信大家对lru链表是不陌生的&#xff0c;它算是一种基础的数据结构吧&#xff0c;而且想必面试时也被问到过什么是lru链表&#xff0c;甚至是让你手写一个lru链表。想必你已经知道了mysql的buffer pool机制以及mysql组…

报应!GitHub上线围剿Python计划,已有4万人跟进,你呢?

人红是非多&#xff0c;最近Python就遇到了这样的问题。与国际技术社区上一片「形势大好」对比鲜明的是&#xff0c;国内技术圈却一直存在对Python&#xff0c;「力挺」和「吃瓜」两派阵营&#xff0c;针锋相对&#xff0c;最近就悄然上线一个争议性疑问&#xff1a;围剿Python…

生物智能与AI——关乎创造、关乎理解(上)

几百万年前&#xff0c;第一次人类智能的星火出现在非洲大陆&#xff0c;并且持续发展&#xff0c;最终在大约10万年前在智人的大脑中达到顶峰。作为现代人类&#xff0c;我们只能想象我们的古代祖先在窥视夜空时所经历的事情&#xff0c;以思考物理现实的本质&#xff0c;以及…