Nginx-记

Nginx是一个高性能的web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

(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 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步机制,异步机制使用的是异步非阻塞方式 。

1、多进程机制

服务器每当收到一个客户端时,就有 服务器主进程 ( master process )生成一个 子进程(worker process )出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。

使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低编程的复杂度,降低开发成本。其次,采用独立的进程,可以让进程互相之间不会影响 ,如果一个进程发生异常退出时,其它进程正常工作, master 进程则很快启动新的 worker 进程,确保服务不会中断,从而将风险降到最低。

缺点是操作系统生成一个子进程需要进行 内存复制等操作,在资源和时间上会产生一定的开销。当有大量请求时,会导致系统性能下降 。

2、异步非阻塞机制

每个工作进程使用异步非阻塞方式 ,可以处理多个客户端请求 。

当某个工作进程 接收到客户端的请求以后,调用 IO 进行处理,如果不能立即得到结果,就去处理其他请求(即为 非阻塞 );而 客户端 在此期间也 无需等待响应 ,可以去处理其他事情(即为 异步 )。

当 IO 返回时,就会通知此 工作进程 ;该进程得到通知,暂时 挂起 当前处理的事务去 响应客户端请求 。

Nginx的特性

1. 反向代理/L7负载均衡器

2. 嵌入式Perl解释器

3. 动态二进制升级

4. 可用于重新编写URL,具有非常好的PCRE支持

Nginx和Apache 之间的区别

 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

Nginx:

Nginx是一个基于事件的web服务器"所有请求都由一个线程处理Nginx避免子进程的概念

Nginx类似于速度

Nginx在内存消耗和连接方面比较好

Nginx在负载均衡方面表现较好

对于PHP来说,Nginx可能更可取,因为它支持PHP

Nginx不支持像IBMi和OpenVMS一样的OSNginx只具有核心功能

Nginx的性能和可伸缩性不依赖于硬件

Apache:

Apache是一个基于流程的服务器单个线程处理单个请求

Apache是基于子进程的

Apache类似于功率

Apache在内存消耗和连接上并没有提高。当流量到达进程的极限时,Apache将拒绝新的连接

Apache支持的PHP、Python、Perl和其他语言使用插件,当应用程序基于Python或Ruby时,它非常有用

Apache支持更多的OS

Apache提供了比Nginx更多的功能

Apache依赖于CPU和内存等硬件组件

Nginx服务器上的Master和Worker进程

主程序 Master process 启动后,通过一个 for 循环来 接收 和 处理外部信号 ;

主进程通过 fork() 函数产生 worker 子进程 ,每个子进程执行一个 for循环来实现Nginx服务器对事件的接收和处理 。

正向代理和反向代理

代理服务器一般指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。

例如:GoAgent翻墙软件。我们的客户端在进行翻墙操作的时候,我们使用的正是正向代理,通过正向代理的方式,在我们的客户端运行一个软件,将我们的HTTP请求转发到其他不同的服务器端,实现请求的分发。

反向代理服务器作用在服务器端,它在服务器端接收客户端的请求,然后将请求分发给具体的服务器进行处理,然后再将服务器的相应结果反馈给客户端。Nginx就是一个反向代理服务器软件。

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。 反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。

Nginx用途

Nginx服务器的最佳用法是在网络上部署动态HTTP内容,使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。

近日总结:昨天正经爬了一次山,跟着驴友留下的路标直达山顶,一路上危险的要死,我一度以为这是我最后一次看世界,甚至内心在和妈妈道别呜呜呜,快到达山顶的部分是最危险的部分,两侧就是悬崖,而且那风也大的离谱,感觉要把我从峭壁上吹下去,甚至我们在悬崖上爬来爬去,好几次我都是跪着过去的......

但是最后到了山顶,爽也是真爽......

第二天早上起来就发现,我拥有了一双好好看的筷子腿......

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

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

相关文章

【OpenGL】使用 python + Qt + OpenGL 的现代渲染

伴随资源 目录 一、说明二、 关于PyQt6.x2.1 QOpenGLWidget详细说明2.2 绘画技巧 三、PyOpenGL四、OpenGL 管线五、Python集成开发环境5.1 Emacs配置5.2 pycharm环境 六、你好,OpenGL!七、QGL控件八、平截头体.svg九、定义几何9.1 立即模式与保留模式9…

awk使用场景案例

1、从nginx访问日志统计访问top10的IP awk {a[$1]}END{for (i in a)print i,a[i] } access.log |sort -k2 -nr|head -10解释说明: awk {a[$1]} 用a数列获取第一个数据,表示统计END{for (i in a)print i,a[i] } END用来写循环语句,用for循环…

OpenAI发布Voice Engine模型!用AI合成你的声音!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

2024年150道高频Java面试题(八)

15. 什么是 Java 中的注解?它有哪些用途? Java 中的注解(Annotation)是一种用于为代码添加元数据的机制。简而言之,注解是提供给编译器或运行时环境的信息,用来解释或说明代码的某些方面。注解不会改变代码…

比torchvision更强大,从timm库引用预训练模型和本地加载的方法

1,介绍 torchvision是大家最常用的预训练模型来源,但是其包含的预训练模型种类很少,往往并不能满足研究者们的需求。 而timm库提供了一个更强大的替代选项。 利用如下代码查询 import timmprint(len(timm.list_models())) 输出 1032 可…

c++编译出来的程序a,当在linux 系统终端执行./a 发生了哪些事情?

路径解析: 用户输入 ./a 并按下回车。终端中的 shell(如 bash、zsh 等)开始解析这个命令,确认 a 是一个可执行文件并且存在于当前目录中。权限检查: Shell 检查 a 文件是否具有执行权限。如果没有执行权限,…

FastAPI+React全栈开发14 FastAPI如何开发REST接口

Chapter03 Getting Started with FastAPI 14 How does FastAPI speak REST FastAPIReact全栈开发14 FastAPI如何开发REST接口 Let’s create a minial FastAPI application, a classic Hello World example, and start examining how FastAPI structures the endpoints. I u…

Android Studio 2023.2.1版本 kotlin编译报错踩坑

1、需求 由于最近在整理项目,做一些公共基础组件Maven仓库封装,由于之前项目jar包和kotlin版本很老,kotlin版本1.3.72版本 Gradle使用5.4.1 Android Studio版本是2023.2.1,分别依次顺序如下图所示。 如下图所示 2、分析编译报错…

如何利用大模型LLM辅助,使用Python完成将CSV快速导入MySQL数据库

目录 一、适合场景 二、开发过程说明 三、功能使用流程 四、代码 1、安装python依赖库 2、完整代码段 一、适合场景 无废话,CSV中有少量不合规数据需要手工处理可利用此方法,适合有点经验的程序员,可以不熟Python,思路还是要…

第三十七章 管理和监控Web网关 - Web 网关缓存表

文章目录 第三十七章 管理和监控Web网关 - Web 网关缓存表Web 网关缓存表手动关闭连接清除缓存测试服务器连接 第三十七章 管理和监控Web网关 - Web 网关缓存表 Web 网关缓存表 第四个状态表列出了 Web Gateway 响应缓存中保存的表单。 Cached Forms - 缓存表单的名称&#x…

图像旋转算法双线性插值法详解

双线性插值法是一种常用的插值算法,用于在图像旋转、缩放等操作中估计目标像素的灰度值。它基于近邻像素之间的灰度变化趋势进行推断,从而提供更平滑和精确的结果。 双线性插值算法的基本思想如下: 首先,根据旋转角度确定旋转中心…

vue2完结

笔记 关于不同版本的Vue: 1.vue.js与vue.runtime.xxx.js的区别:(1)vue.js是完整版的Vue,包含:核心功能模板解析器(2)vue.runtime.xxx.js是运行版本的Vue,只包含核心功能,没有模板解析器 2.因为…

docker快速安装单节点和多点MongoDB副本集

文章目录 概要一、单节点副本集二、多节点副本集三、参考 概要 最近项目的MongoDB版本终于升级到了MongoDB4.4了,可以使用使用事务了,但MongoDB的不支持单节点事务,至少是副本集。 测试环境没必要搭建复杂的副本集,还好官方给出了…

【动手学深度学习-pytorch】-9.3深度循环神经网络

到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。 其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。 只要交互类型建模具有足够的灵活性,这就不是一个大问题。 然而,对一个单层来说,这可能具有…

量化交易入门(二十七)回撤、收益率、夏普比率

回撤 一、回撤的定义与计算 回撤是指投资组合或交易账户从历史最高点下跌到后来最低点的幅度,通常用百分比表示。计算公式为: 回撤 (历史最高净值 - 当前净值) / 历史最高净值 100% 例如,某策略历史最高净值为150万,当前净值跌到了100万,则回撤为:(150-100)/150100%33.33%…

synchronized 和 ReentrantLock 的区别是什么

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:synchronized 和 ReentrantLock 的区别是什么 1. 获取锁的方式 synchronized:synchronized的锁获取是隐式的。当线程进入synchronized修饰的代码…

探索SOCKS5代理、代理IP与跨界电商、游戏技术的网络安全实践

介绍数字时代跨境业务的兴起,特别是跨界电商和全球游戏市场的扩张。 简述网络安全在支持跨境业务扩展中的核心作用,特别是SOCKS5代理和代理IP技术的重要性。 第一章:出海业务概述 跨界电商与全球化挑战:介绍跨界电商的基本模式&am…

Oracle 19C RAC集群补丁升级

文章目录 一、补丁包概述二、OPatch检查和更新Grid用户更新OPatchOracle用户更新OPatch 三、验证Oracle Inventory的有效性四、运行 OPatch 冲突检查五、运行opatch命令检查GI HOME下是否有足够的空间六、补丁冲突检测与解决(修补程序)七、使用root用户应…

Linux - 第三节

改变用户类型 su 仅单纯的进行身份变化 依旧处于普通用户里面 su - 进行重新登录更改身份 退出用exit / ctrld su 用户名 改成成其他身份 对一条命令进行提权 sudo command r:可读 w:可写 x:可执行 -:对应的权限位置,没有权限 去掉所有权限 chmod u…

MongoDB聚合运算符:$linearFill

文章目录 MongoDB聚合运算符:$linearFill语法使用对比$fill和$linearFill 举例使用线性插值填充缺失值在单个阶段中使用多种填充方法 MongoDB聚合运算符:$linearFill $linearFill聚合运算符在一个窗口中基于附近字段的值使用线性插值填充null和缺失字段…