简述一下什么是Nginx,它有什么优势和功能?Nginx是如何处理一个HTTP请求的呢?

简述一下什么是 Nginx ,它有什么优势和功能?
Nginx 是一个 web 服务器和方向代理服务器,用于 HTTP HTTPS SMTP POP3 IMAP 协议。因
它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx---Ngine X ,是一款免费的、自由的、开源的、高性能 HTTP 服务器和反向代理服务器;
也是一个 IMAP POP3 SMTP 代理服务器; Nginx 以其高性能、稳定性、丰富的功能、简单的
配置和低资源消耗而闻名。 也就是说 Nginx 本身就可以托管网站(类似于 Tomcat 一样),进行 Http 服务处理,也可以作为
反向代理服务器 、负载均衡器和 HTTP 缓存。
Nginx 解决了服务器的 C10K (就是在一秒之内连接客户端的数目为 10k 1 万)问题。它的设
计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制 事件驱动机制,是一
种异步事件驱动结构。
优点:
1 )更快 这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,
在高峰期(如有数以万计的并发请求), Nginx 可以比其他 Web 服务器更快地响应请求。
2 )高扩展性,跨平台 Nginx 的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型
且耦合度极低的模块组成。因此,当对某一个模块修复 Bug 或进行升级时,可以专注于模块自身,
无须在意其他。而且在 HTTP 模块中,还设计了 HTTP 过滤器模块:一个正常的 HTTP 模块在处理完请
求后,会有一串 HTTP 过滤器模块对请求的结果进行再处理。这样,当我们开发一个新的 HTTP 模块
时,不但可以使用诸如 HTTP 核心模块、 events 模块、 log 模块等不同层次或者不同类型的模块,还
可以原封不动地复用大量已有的 HTTP 过滤器模块。这种低耦合度的优秀设计,造就了 Nginx 庞大的
第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用。 Nginx 的模块都是嵌入
到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具
备极其优秀的性能,充分利用 Nginx 的高并发特性,因此,许多高流量的网站都倾向于开发符合自
己业务特性的定制模块。
3 )高可靠性:用于反向代理,宕机的概率微乎其微 高可靠性是我们选择 Nginx 的最基本条件,因
Nginx 的可靠性是大家有目共睹的,很多家高流量网站都在核心服务器上大规模使用 Nginx
Nginx 的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用
模块都非常稳定,每个 worker 进程相对独立, master 进程在 1 worker 进程出错时可以快速
新的 worker 子进程提供服务。
4 )低内存消耗 一般情况下, 10 000 个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗 2.5MB
内存,这是 Nginx 支持高并发连接的基础。
5 )单机支持 10 万以上的并发连接 这是一个非常重要的特性!随着互联网的迅猛发展和互联网用
户数量的成倍增长,各大公司、网站都需要应付海量并发请求,一个能够在峰值期顶住 10 万以上并
发请求的 Server ,无疑会得到大家的青睐。理论上, Nginx 支持的并发连接上限取决于内存, 10
远未封顶。当然,能够及时地处理更多的并发请求,是与业务特点紧密相关的。
6 )热部署 master 管理进程与 worker 工作进程的分离设计,使得 Nginx 能够提供热部署功能,即
可以在 7×24 小时不间断服务的前提下,升级 Nginx 的可执行文件。当然,它也支持不停止服务就更
新配置项、更换日志文件等功能。 7 )最自由的 BSD 许可协议 这是 Nginx 可以快速发展的强大动力。 BSD 许可协议不只是允许用户免
费使用 Nginx ,它还允许用户在自己的项目中直接使用或修改 Nginx 源码,然后发布。这吸引了无数
开发者继续为 Nginx 贡献自己的智慧。 以上 7 个特点当然不是 Nginx 的全部,拥有无数个官方功能模
块、第三方功能模块使得 Nginx 能够满足绝大部分应用场景,这些功能模块间可以叠加以实现更加
强大、复杂的功能,有些模块还支持 Nginx Perl Lua 等脚本语言集成工作,大大提高了开发效
率。这些特点促使用户在寻找一个 Web 服务器时更多考虑 Nginx 。 选择 Nginx 的核心理由还是它能
在支持高并发请求的同时保持高效的服务。
Nginx 是如何处理一个 HTTP 请求的呢?
Nginx 是一个高性能的 Web 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步机制 ,异步机制使用的是异步非阻塞方式 ,接下来就给大家介绍一下 Nginx 的多线程机制和异步非阻塞
机制 。
1 、多进程机制
服务器每当收到一个客户端时,就有 服务器主进程 ( master process )生成一个 子进程(worker process )出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。
使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低
编程的复杂度,降低开发成本。其次,采用独立的进程,可以让进程互相之间不会影响 ,如果一个
进程发生异常退出时,其它进程正常工作, master 进程则很快启动新的 worker 进程,确保服务
不会中断,从而将风险降到最低。
缺点是操作系统生成一个子进程需要进行 内存复制等操作,在资源和时间上会产生一定的开销。当
有大量请求时,会导致系统性能下降 。
2 、异步非阻塞机制
每个工作进程 使用 异步非阻塞方式 ,可以处理 多个客户端请求 。
当某个 工作进程 接收到客户端的请求以后,调用 IO 进行处理,如果不能立即得到结果,就去 处理 其他请求 (即为 非阻塞 );而 客户端 在此期间也 无需等待响应 ,可以去处理其他事情(为异 步 )。当 IO 返回时,就会通知此 工作进程 ;该进程得到通知,暂时 挂起 当前处理的事务去 响应客户端请求 。

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

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

相关文章

[计网底层小探索]:实现并部署多线程并发Tcp服务器框架(基于生产者消费者模型的线程池结构)

文章目录 一.网络层与传输层协议sockaddr结构体继承体系(Linux体系)贯穿计算机系统的网络通信架构图示: 二.实现并部署多线程并发Tcp服务器框架线程池模块序列化反序列化工具模块通信信道建立模块服务器主体模块任务回调模块(根据具体应用场景可重构)Tips:DebugC代码过程中遇到…

el-table同时固定左列和右列时,出现错误情况

最近遇到一个问题,就是需求是要求表格同时固定序号列和操作列,我们用的是饿了么组件库的el-table,如下图,出现了错误情况: 解决方法就是使用doLayout方法: 如果使用了keep-alive,可以在activated里执行doLayout方法: activated() {this.$nextTick(() => {this.$ref…

【Crypto | CTF】BUUCTF RSA2

天命:密码学越来越难了,看别人笔记都不知道写啥 天命:莫慌,虽然我不会推演法,但我可以用归纳法 虽然我不知道解题的推演,但我可以背公式啊哈哈哈 虽然我不会这题,但是我也能做出来 公式我不知…

机器学习基本概念(李宏毅课程)

目录 一、概念:1、机器学习概念:2、深度学习概念: 二、深度学习中f(.)的输入和输出:1、输入:2、输出: 三、三种机器学习任务:1、Regression回归任务介绍:2、Classification分类任务介绍:3、Stru…

计算以10为底的对数 math.log10(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算以10为底的对数 math.log10(x) [太阳]选择题 以下代码的输出结果中正确的是? import math print("【执行】math.log10(10)") print(math.log10(10)) print("【执行】math…

【elasticsearch实战】知识库文件系统检索工具FSCrawler

需求背景 最近有一个需求需要建设一个知识库文档检索系统,这些知识库物料附件的文档居多,有较多文档格式如:PDF, Open Office, MS Office等,需要将这些格式的文件转化成文本格式,写入elasticsearch 的全文检索索引&am…

UniApp中实现微信分享功能:步骤详解与最佳实践

在现代移动开发中,分享功能已成为许多应用的标配。特别是在中国,微信作为最大的社交平台,其分享功能对于应用的推广和用户互动至关重要。本文将详细介绍如何在UniApp中实现微信分享功能,包括分享链接到微信好友,并显示…

进度条小程序

文章目录 铺垫回车换行缓冲区概述强制冲刷缓冲区 简单实现倒计时功能进度条小程序版本一实例代码效果展示分析 版本二 铺垫 回车换行 回车和换行是两个独立的动作 回车是将光标移动到当前行的最开始(最左侧) 换行是竖直向下平移一行 在C语言中&…

怿星科技测试实验室(EPT LABS)服务介绍

据中国汽车工业协会数据,2023年我国汽车产销量分别达3016.1万辆和3009.4万辆,年产销量双双创历史新高,汽车行业进入了新时代。新汽车时代下的OEM竞争更激烈,汽车电子架构更复杂,研发周期更短,软件迭代更快&…

VSCODE中使用Django处理后端data和data models

链接: Python and Django tutorial in Visual Studio Code MVC的理解 在实际的程序中采用MVC的方式进行任务拆分。 Model(模型)负责封装应用程序的数据和业务逻辑部分。Model包含数据结构,数据处理逻辑以及相关的操作方法&#…

NetSuite 中Inventory Adjustment批次物料CSV导入分析二

上一篇最后我们有一个遗留问题是说,调增和调减的操作是否能在一个CSV导入模版中进行操作,经过测试后发现,是可以的,只是External ID需要在设置的时候注意对应好就OK。这里建议大家先查看上一篇文章,因为有一些完全重复…

Day14-Linux系统基础权限知识精讲

Day14-Linux系统基础权限知识精讲 1. chattr2. Linux系统权限。2.1 基础权限介绍2.2 画图讲解2.3 文件和目录权限细节总结2.4 建环境测试2.5 数字权限设置2.6 字符权限设置 给文件加特殊属性,实现特殊功能的命令。 1. chattr a 只能追加内容,不能删除。…

UE蓝图 入口(FunctionEntry)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 文章目录 系列文章目录一、FunctionEntry节点功能二、入口节点用法1. 创建函数2. 命名函数3. 定义参数4. 编写函数逻辑5…

Git合并固定分支的某一部分至当前分支

在 Git 中,通常使用 git merge 命令来将一个分支的更改合并到另一个分支。如果你只想合并某个分支的一部分代码,可以使用以下两种方法: 1.批量文件合并 1.1.创建并切换到一个新的临时分支 首先,从要合并的源分支(即要…

C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

C面向对象程序设计-北京大学-郭炜【课程笔记(四)】 1、this指针1.1、this指针的作用1.2、this指针和静态成员函数 2、静态成员变量和静态成员函数2.1、基本概念2.2、基本概念总结2.3、如何访问静态成员2.4、静态成员变量的使用场景(重要&…

Qt中常见的JS类和函数(一)

相关系列文章 Qt中字符串转换为JS的函数执行 目录 1.引言 2.全局对象(The Global Object) 2.1.值属性(Value Properties) 2.1.1.NaN 2.1.2.Infinity 2.1.3.undefined 2.2.函数属性(Function Properties) 2.2.1.eval(x) 2.2.2.parseInt(string, radix) 2.2.3.parseFl…

浏览器---浏览器/http相关面试题

1.localStorage和sessionStorage 共同点:二者都是以key-value的键值对方式存储在浏览器端,大小大概在5M。 区别: (1)数据有效期不同:sessionStorage仅在当前浏览器窗口关闭之前有效;localStorag…

wps电子表格(xlsx)在excel打开时,多余图形(shapes)的处理

背景: 1. win10, excel 打开 wps 生成的 xlsx文档; 2. 文档中有多余的图形,经检测为shape大类; 3. 文档中可见的图形可以全选后删除; 但是不可见部分仍然存在; 4. vba删除时,可以直接循环删除&#xff…

Eigen:Vector3d 变量初始化遇到的问题

Eigen:Vector3d 变量初始化遇到的问题 2024.2.22 日 ,在使用 Eigen:Vector3d 这个类型的 变量,在类中进行初始化时 遇到了如下问题: 首先在类的声明内部,是不能声明完,再给变量赋值的,不管是 Eigen:Vector…

【 Flutter】安装、运行坑记录

运行demo报错 Exception in thread “main” java.net.ConnectException: Connection timed out: connect原因:网络问题,gradle包未能下载 解决方案:配置android studio代理,重新打开项目,as会自动下载缺失依赖