Nginx-记

news2024/10/10 22:19:33

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.coloradmin.cn/o/1554156.html

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

相关文章

工业无线网关在汽车制造企业的应用效果和价值-天拓四方

随着智能制造的快速发展,工业无线网关作为关键通信设备,在提升生产效率、优化生产流程、实现设备间的互联互通等方面发挥着越来越重要的作用。以下是一个关于工业无线网关在智能制造行业应用的具体案例,展示了其在实际生产中的应用效果和价值…

Nomad Web更新没有最快只有更快

大家好,才是真的好。 很长时间没介绍运行在浏览器中的Notes客户端即Nomad Web更新情况。 不用安装,直接使用,还可以完美地兼容适应各种操作系统,Nomad Web一定是Notes/Domino产品现在和将来重点发展的用户访问模式。 不过&…

C语言例4-34:找出11~100所有不能被5整除的整数,要求在第n行输出10*n+1~10*(n+1)之间符合要求的数

代码如下&#xff1a; //找出11~100所有不能被5整除的整数&#xff0c;要求在第n行输出10*n1~10*(n1)之间符合要求的数 #include<stdio.h> int main(void) {int i;for(i11;i<100;i) //遍历11~100的所有整数{if(i%100){printf("\n");continue; /…

【Leetcode每日一题】 动态规划 - 不同路径(难度⭐⭐)(46)

1. 题目解析 题目链接&#xff1a;62. 不同路径 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 想要解决这个问题&#xff0c;我们得像个侦探一样&#xff0c;一步步地追踪路径&#xff0c;找出所有可能的走法。接下…

uinapp触底与下拉时间触发的使用

在UniApp中&#xff0c;onReachBottom 和 onPullDownRefresh 是两个重要的生命周期函数&#xff0c;分别用于处理页面滚动到底部时触发的事件和下拉刷新时触发的事件。 在页面的 .vue 文件中&#xff1a; <template> <view> <scroll-view scroll-y"tr…

STM32之HAL开发——串口配置(源码)

串口收发原理框图&#xff08;F1系列&#xff09; 注意&#xff1a;数据寄存器有俩个一个是收一个是发&#xff0c;但是在标准库或者HAL库中没有特别区分开来是俩个寄存器&#xff01; USART 初始化结构体详解 HAL 库函数对每个外设都建立了一个初始化结构体&#xff0c;比如 …

【八股】泛型

泛型存在的意义&#xff1f; 为了使相同的代码适用于多种数据类型&#xff0c;也就是代码复用。 参数类型上下限限制 <?> 无限制 <? extends E> 声明了类型的上界&#xff0c;表示参数类型可以是他或他的子类。 <? super E> 声明了类型的下界&#xf…

Vue 2 组件发布到 npm 的常见问题解决

按照 Vue 2 组件打包并发布到 npm 的方法配置项目后&#xff0c;项目在实际开发过程中&#xff0c;随着代码写法的多样性增加而遇到的各种打包问题&#xff0c;本文将予以逐一解决&#xff1a; 本文目录 同时导出多个组件 样式表 import 问题解决 Json 文件 import 问题解决…

【3月29日信息差】2G 50/年,4G 618/3年 京东云云服务器促销 游戏服务器活动 我的世界 幻兽帕鲁 雾锁王国通用

《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更新】云服务器1分钟教会你如何选择教程 https://docs.qq.com/document/DV0RCS0lGeHdMTFFV?tab000003 ​ 当前活动&#xff1a;采购季&#…

老阳推荐的视频号项目是真的吗?能赚钱吗?

在当下数字化、信息化的社会背景下&#xff0c;视频号项目如雨后春笋般涌现&#xff0c;成为许多人关注的焦点。特别是在一些知名人士&#xff0c;如老阳的推荐下&#xff0c;这些项目更是受到了广泛的关注和讨论。那么&#xff0c;老阳推荐的视频号项目是否真实存在?它能否真…

matplotlib 绘图

matplotlib 绘图 方便设置legend图例的位置 ax1.legend(loc‘upper center’, bbox_to_anchor(0.3, -0.1)) ax2.legend(loc‘upper center’, bbox_to_anchor(0.6, -0.1)) import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm from scipy.inter…

Vue指令之v-bind

v-bind用于动态设置html的标签属性&#xff0c;如src、url、title等&#xff0c;因为插值表达式{{}}没有办法用在标签属性上&#xff0c;需要用到其他工具。 比如前端要根据后端传来的参数&#xff0c;动态的显示图片&#xff0c;就需要把图片的src属性绑定到Vue实例的一个变量…

ESPI7罗德与施瓦茨ESPI7测试接收机

181/2461/8938产品概述&#xff1a; R&S ESPI7 测试接收机实现了罗德与施瓦茨预认证级别完全合规 EMI 测试接收机的许多优点。配备 R&S ESPI-K50 选件后&#xff0c;ESPI7 可用于测量无线电通信和广播网络的场强分布。 由于采用通用平台系统&#xff0c;R&S ESPI…

Java数据结构-单链表

目录 1. 链表相关概念2. 功能实现2.1 整体框架2.2 增加addFirstaddLastaddIndex 2.3 删除2.3.1 remove2.3.2 removeall 2.4 查找contains 2.4 修改2.4.1 modify2.4.2 modifyAll 3. 全部代码 1. 链表相关概念 老铁们好&#xff01;今天我们要学习一种新的数据结构&#xff1a;链…

vue3+ts | axios 二次封装

安装 pnpm i axios axios 二次封装 // 实用性工具文件 放于 utils文件中 // 对axios函数库进行二次封装&#xff1f; // 二次封装的目的&#xff1f;利用axios请求、响应拦截器 import axios from axios// axios.create 创建一个axios实例&#xff1a;可以设置基础路径&a…

蓝桥杯 - 小明的背包1(01背包)

解题思路&#xff1a; 本题属于01背包问题&#xff0c;使用动态规划 dp[ j ]表示容量为 j 的背包的最大价值 注意&#xff1a; 需要时刻提醒自己dp[ j ]代表的含义&#xff0c;不然容易晕头转向 注意越界问题&#xff0c;且 j 需要倒序遍历 如果正序遍历 dp[1] dp[1 - vo…

公平锁和非公平锁,为什么要“非公平”?

公平锁和非公平锁&#xff0c;为什么要“非公平”&#xff1f; 主要讲一讲公平锁和非公平锁&#xff0c;以及为什么要“非公平”&#xff1f; 什么是公平和非公平 首先&#xff0c;我们来看下什么是公平锁和非公平锁&#xff0c;公平锁指的是按照线程请求的顺序&#xff0c;…

对话式 AI 的天花板来了,Hume AI 再拿 5000 万美金融资

Hume AI 刚刚推出了世界上第一款共情 AI 语音接口 EVI&#xff0c;它可以让开发人员能够通过几行代码将情感智能人工智能语音集成到健康和保健、AR/VR、客户服务呼叫中心、医疗保健等领域的应用程序中。 之前我介绍过好几个对话式 AI 产品&#xff0c;或者也可以将它们称为 AI…

WebPack的使用及属性配、打包资源

WebPack(静态模块打包工具)(webpack默认只识别js和json内容) WebPack的作用 把静态模块内容压缩、整合、转译等&#xff08;前端工程化&#xff09; 1️⃣把less/sass转成css代码 2️⃣把ES6降级成ES5 3️⃣支持多种模块文件类型&#xff0c;多种模块标准语法 export、export…

STM32之HAL开发——串口配置(CubeMX)

串口引脚初始化&#xff08;CubeMX&#xff09; 选择RCC时钟来源 选择时钟频率&#xff0c;配置为最高频率72MHZ 将单片机调试模式打开 SW模式 选择窗口一配置为异步通信模式 点击IO口设置页面&#xff0c;可以看到当前使用的串口一的引脚。如果想使用复用功能&#xff0c;只需…