百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

带你简单了解一下Nginx服务器

off999 2025-02-06 16:04 17 浏览 0 评论

Nginx 其实就是一款轻量级的 Web 服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

那么你可能会问了:“不是说 Nginx 吗?怎么又扯出来一个 Web 服务器呢?啥是服务器?”。别着急,在学习 Nginx 之前你还真得知道什么是服务器这个概念,下面我们先来看下到底啥是服务器。

啥是服务器

服务器的英文叫 Server , 顾名思义就是为其他人服务的。我们可以把所有为其他用户提供服务的机器或软件都称作服务器。

  • Server 可以指硬件,比如谷歌公司对用户提供服务的主机,下图是谷歌公司的一个数据中心图片,走道两侧亮着红黄蓝颜色的笨重机器就是服务器。
  • Server 也可以是一个软件。比如我们本次专栏要介绍的 Nginx,它就是一个对用户提供 HTTP 服务的Server。又比如我们常听到的网易邮箱服务器,它就是专门为用户提供邮件服务的。这些软件都运行在一个个物理机器上面,专门对外提供对应的服务。

WEB服务器

我们上面唠叨了一下什么是服务器。下面我们说一下啥是 Web 服务器,在上面我们也说了 Nginx 其实就是一个 轻量级的 Web 服务器,那么什么是 Web 服务器呢?

我们平时可以打开浏览器访问微博的网站,获取各种娱乐圈各种劲爆消息。这个看似简单的行为,背后有隐藏了那些细节呢?

上图就是一个典型的 web 请求流程,主要分为五个步骤:

  1. 浏览器本身作为一个客户端,当你输入 www.weibo.com 的时候,向 DNS 服务器发出域名请求服务;
  2. DNS 服务器将域名将对应的 IP 地址返回给浏览器;
  3. 浏览器使用 IP 地址找到对应的服务器后,建立 TCP 连接,向服务器发送 HTTP 请求;
  4. 服务器接收到请求之后才开始处理,返回 HTTP 响应;
  5. 浏览器收到来自服务器的响应后开始渲染页面,最后断开与该服务器之间的 TCP 连接。

我们所介绍的 Web 服务器就是在第 3 和 4 步骤中发挥作用的。它的作用很简单,概括地讲,主要完成三个工作:

  1. 接收请求;
  2. 处理请求,生成响应 ;
  3. 发送响应。

哈哈,当然了,一个成熟的 Web 服务器肯定还有其他各种各样的功能,但是原理都是一样。所以,一定要淡定,学会 Web 服务器并没有想象中的那么困难。

WEB服务器的分类

其实,现在的市面上面有很多类似于 Nginx 的 Web 服务器,如下图:

几款服务器比较

下面我们简单地比较一下几款流行的 Web 服务器软件的区别。

  • Apache 是一款历史悠久的开源 Web 服务器软件。拥有很多的第三方模块,你想使用的功能基本上都可以找到,避免自己重复造轮子。采用多进程方式处理请求,每个请求都对应于一个进程。在高并发的情况下,多进程处理方式特别的消耗资源,所以天然不适合高并发场景;
  • Nginx 是年轻(相比Apache)的开源 Web 服务器软件。它也采用 C 语言编写,代码运行效率很高。它采用了epoll (以Linux为例) 事件处理机制作为模型,能够保证非常高的并发量;
  • IIS是微软的Web服务器软件,这个可是收费的哦~~~

我们看一下 Netcraft 公司在2019年7月份统计的全球 Web 服务器占用率调查:

从这两张图中可以看到,Nginx 开发者数量已经明显的超过了其他 Web Server 开发者数量,独占鳌头。

在 Web Server 市场使用率中,Nginx 的占有率一直在稳步的上升,超过了 IIS,与 Apache 的差距越来越小。

所以,使用和学习 Nginx 已经成为每一个后端工程师必备的技能了。好了,铺垫了这么多,下面我们正式来看下 Nginx 倒底是个什么东西。

Nginx简介

Nginx是由战斗民族的一位名叫 Igor Sysoev 的程序猿开发的,开源、高性能的 HTTP 服务器和反向代理服务器,也可以作为一个 IMAP/POP3 代理服务器。也就是说,Nginx不仅可以托管网站,进行HTTP服务处理,还可以作为反向代理服务器。

Nginx 出现的初衷是为了解决著名的 C10K 问题而出现的。和传统的 Web Server 不一样,Nginx 使用了异步事件处理机制架构。这种架构可以轻松高效地处理大量的请求,并且非常的节省内存。高性能是Nginx最大的优点。

啥?不知道什么是C10K问题,我严重怀疑你是从外星球来的,来,看这里。

不知道什么是异步事件处理机制?没关系,我会在后面的小节中分析的,包学会。

为什么选择Nginx

  1. 占用内存小。这得益于 Nginx 使用 C 语言编写,能够高效使用 CPU、内存等系统资源。并且作者自己造了很多的轮子 , 比如 Nginx 自己实现了内存管理系统,动态数组机制等。Nginx 作者对内存的使用控制简直到了丧心病狂的地步,所以非常的节省系统资源,特别是内存;
  2. 高并发。在 Linux 系统上,Nginx 使用了 epoll 机制,能够高效处理大量的连接数。理论上,Nginx 可以同时处理的最大连接数取决于你的机器的物理内存,上不封顶;
  3. 高可靠性。我认为 Nginx 的高可靠性主要体现在两方面:(一):Nginx 使用了 Master-Worker 机制,真正处理请求的是Worker进程。Master进程可以监控Worker进程的运行状况,当某个Worker进程因意外原因退出的时候,Master会重新启动Worker进程;(二):Nginx 的内部框架非常优秀。它的各个模块都非常简单,所以也非常的稳定。
  4. 热部署。可能大家觉得这个原因并不重要,其实在实际的线上环境是非常重要的。代码上线之后,我们只需要执行 nginx -s reload 命令就可以完成 Nginx 的重启,其他的交给 Nginx 就可以了,你可以安心去喝咖啡了。如果没有亲身体验过这种痛苦,你是无法理解的这是多么痛的领悟。

Nginx能干啥

上面我们 ‘吹嘘’ 了 Nginx 的这么多优点,那么 Nginx 究竟能干什么呢?

  1. HTTP 服务器。作为一款优秀的 Web 服务器,那么提供 HTTP 服务显然是它的首要任务;
  2. 负载均衡。Nginx 提供了多种负载均衡策略,实现了7层负载均衡。针对不同的情形,我们可以选择合适的策略。另外我们也可以自己实现特殊需求的负载均衡策略;
  3. 反向代理。Nginx 是一款非常优秀的反向代理服务器。


扩展链接:MySQL面试必问题,希望对你有帮助。

相关推荐

让 Python 代码飙升330倍:从入门到精通的四种性能优化实践

花下猫语:性能优化是每个程序员的必修课,但你是否想过,除了更换算法,还有哪些“大招”?这篇文章堪称典范,它将一个普通的函数,通过四套组合拳,硬生生把性能提升了330倍!作者不仅展示了“术”,更传授...

7 段不到 50 行的 Python 脚本,解决 7 个真实麻烦:代码、场景与可复制

“本文整理自开发者AbdurRahman在Stackademic的真实记录,所有代码均经过最小化删减,确保在50行内即可运行。每段脚本都对应一个日常场景,拿来即用,无需额外依赖。一、在朋...

Python3.14:终于摆脱了GIL的限制

前言Python中最遭人诟病的设计之一就是GIL。GIL(全局解释器锁)是CPython的一个互斥锁,确保任何时刻只有一个线程可以执行Python字节码,这样可以避免多个线程同时操作内部数据结...

Python Web开发实战:3小时从零搭建个人博客

一、为什么选Python做Web开发?Python在Web领域的优势很突出:o开发快:Django、Flask这些框架把常用功能都封装好了,不用重复写代码,能快速把想法变成能用的产品o需求多:行业...

图解Python编程:从入门到精通系列教程(附全套速查表)

引言本系列教程展开讲解Python编程语言,Python是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,它也是互联网最热门的编程语言之一。Python生态丰富,库(模块)极其丰富,这使...

Python 并发编程实战:从基础到实战应用

并发编程是提升Python程序效率的关键技能,尤其在处理多任务场景时作用显著。本文将系统介绍Python中主流的并发实现方式,帮助你根据场景选择最优方案。一、多线程编程(threading)核...

吴恩达亲自授课,适合初学者的Python编程课程上线

吴恩达教授开新课了,还是亲自授课!今天,人工智能著名学者、斯坦福大学教授吴恩达在社交平台X上发帖介绍了一门新课程——AIPythonforBeginners,旨在从头开始讲授Python...

Python GUI 编程:tkinter 初学者入门指南——Ttk 小部件

在本文中,将介绍Tkinter.ttk主题小部件,是常规Tkinter小部件的升级版本。Tkinter有两种小部件:经典小部件、主题小部件。Tkinter于1991年推出了经典小部件,...

Python turtle模块编程实践教程

一、模块概述与核心概念1.1turtle模块简介定义:turtle是Python标准库中的2D绘图模块,基于Logo语言的海龟绘图理念实现。核心原理:坐标系系统:原点(0,0)位于画布中心X轴:向右...

Python 中的asyncio 编程入门示例-1

Python的asyncio库是用于编写并发代码的,它使用async/await语法。它为编写异步程序提供了基础,通过非阻塞调用高效处理I/O密集型操作,适用于涉及网络连接、文件I/O...

30天学会Python,开启编程新世界

在当今这个数字化无处不在的时代,Python凭借其精炼的语法架构、卓越的性能以及多元化的应用领域,稳坐编程语言排行榜的前列。无论是投身于数据分析、人工智能的探索,还是Web开发的构建,亦或是自动化办公...

Python基础知识(IO编程)

1.文件读写读写文件是Python语言最常见的IO操作。通过数据盘读写文件的功能都是由操作系统提供的,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个...

Python零基础到精通,这8个入门技巧让你少走弯路,7天速通编程!

Python学习就像玩积木,从最基础的块开始,一步步搭建出复杂的作品。我记得刚开始学Python时也是一头雾水,走了不少弯路。现在回头看,其实掌握几个核心概念,就能快速入门这门编程语言。来聊聊怎么用最...

一文带你了解Python Socket 编程

大家好,我是皮皮。前言Socket又称为套接字,它是所有网络通信的基础。网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程。端口号的范围为0~65535(用户端口...

Python-面向对象编程入门

面向对象编程是一种非常流行的编程范式(programmingparadigm),所谓编程范式就是程序设计的方法论,简单的说就是程序员对程序的认知和理解以及他们编写代码的方式。类和对象面向对象编程:把...

取消回复欢迎 发表评论: