当前位置: 首页 > news >正文

0001nginx简介、相关模型与原理

文章目录

  • 一. 什么是Nginx
  • 二. ngnix的一些模型
    • 1、nginx的进程模型
    • 2、worker的抢占(锁)机制模型
    • 3. nginx事件处理模型
  • 三. nginx加载静态资源的过程

一. 什么是Nginx

Nginx是一个高性能HTTP反向代理服务器,以下是nginx的相关能力

  1. 反向代理:nginx选择去将请求路由到那个ip
  2. 通过配置文件实现集群、负载均衡
  3. 可以处理2-3万并发连接数,官方监测能支持5万并发
  4. 静态资源服务器:通过将静态资源变成为服务。
  5. 网关:对接口进行拦截,配置安全管理

 
正向代理与反向代理的概念

正向代理:请求直接到达目标服务器
反向代理:请求被Nginx统一接收,反向代理服务器接收到之后,按照一定的规则将请求分发给指定服务器(通过http模块)
反向代理的优点:可以隐藏服务器的存在和特征,充当client和服务器的中间层,这是比较安全的。

 

二. ngnix的一些模型

1、nginx的进程模型

nginx采用单主进程,多子进程的模型

配置位置:nginx.conf
worker_processes 默认为1,也可以配置为:worker_processes auto;
在这里插入图片描述
请求过程:

从客户端(前端页面请求、postman请求)到nginx(master)接收请求,分发请求到工作进程,工作进程处理请求并将返回结果发送给客户端,最后管理nginx与客户端的链接。

  1. 客户端发送请求:当客户端发送HTTP请求到Nginx服务器时,Nginx会监听并接收这个请求。
  2. Nginx接收请求:Nginx的主进程接收到客户端的请求后,会将请求分发给工作进程(worker process)来处理。
  3. 工作进程处理请求:工作进程会根据Nginx的配置文件中的规则,对请求进行处理。这包括处理静态文件、代理请求到后端服务器、负载均衡等操作
  4. 响应客户端:工作进程处理完请求后,会生成相应的HTTP响应,并将响应发送回给客户端。
  5. 关闭连接:一旦响应发送给客户端,Nginx会关闭与客户端的连接,释放资源。

注意:

  1. master监控worker的健康状况,如果有关闭的worker进程,会重启新的worker进程。
  2. worker之间相互独立。

查看主进程和工作进程

ps -ef | grep nginx 

在这里插入图片描述
看到有一个主进程,若干work进程。

 

2、worker的抢占(锁)机制模型

在这里插入图片描述
假设一个master开启三个worker子进程,
此时client发起请求,三个worker去抢占互斥锁accep_mutex,假设worker1抢到了就处理请求,其他worker等待worker1处理完一个请求并将结果返回给client后,重新抢占锁。

 

3. nginx事件处理模型

当client向worker1请求堵塞时,其他client可以接着发出请求到work1,是异步非堵塞模型。

在这里插入图片描述
为什么Nginx性能这么高?

因为他的事件处理机制为异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
非阻塞使得系统资源开销远远小于阻塞模式,因为系统不需要创建新的进程(或线程)。

 

三. nginx加载静态资源的过程

nginx接受客户端请求并找到静态资源的过程

在这里插入图片描述
加载过程:

  1. 客户端请求:在页面上输入http:ip:80/ 。路由“/”的请求会请求到Nginx服务器,
  2. nginx监听到来自80端口的请求,接着找到监听80端口的server,最后server加载默认的html

这里通过一个简单的server块配置理解下server:

server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}

这里表示一台server,监听80端口,server_name对应client的请求ip、hostname,当server监听到之后会加载nginx目录(可配)下html目录配置的文件。

接着详细描述一下:

  1. server指令用于定义一个虚拟主机(Virtual Host),即一个独立的服务器实例。每个server块都包含了对特定域名或IP地址的请求的处理规则
  2. 端口:server块的监听端口,即当有固定端口的进程请求时,server会进行拦截
  3. 域名和IP地址:可以使用servername指令来指定server块所匹配的域名或IP地址。例如,servername example.com;表示匹配域名为example.com的请求。
  4. 请求处理:拦截请求后,根据配置进行相对应的请求:如代理、重定向、静态文件处理等。例如,可以使用location指令来匹配要请求的URL
  5. SSL/TLS支持:如果需要启用HTTPS协议,可以在server块中配置SSL/TLS证书和相关参数,以实现安全的通信。
  6. 负载均衡:Nginx还支持负载均衡功能,可以在server块中配置upstream指令,将请求分发给多个后端服务器,以提高系统的性能和可靠性

相关文章:

0001nginx简介、相关模型与原理

文章目录 一. 什么是Nginx二. ngnix的一些模型1、nginx的进程模型2、worker的抢占(锁)机制模型3. nginx事件处理模型 三. nginx加载静态资源的过程 一. 什么是Nginx Nginx是一个高性能HTTP反向代理服务器,以下是nginx的相关能力 反向代理&am…...

elasticsearch简单入门语法

基本操作 创建不同的分词器 ik_smart: 极简分词 ; ik_max_word: 最细力再度分词 基本的rest命令 methodurl地址描述PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)POSTlocalhost:9200/索引名称/类型名称创建文…...

Python自动化测试用例:如何优雅的完成Json格式数据断言

目录 前言 直接使用 优化 封装 小结 进阶 总结 资料获取方法 前言 记录Json断言在工作中的应用进阶。 直接使用 很早以前写过一篇博客,记录当时获取一个多级json中指定key的数据: #! /usr/bin/python # coding:utf-8 """ aut…...

阿里云对象存储服务OSS

1、引依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency> <dependency><groupId>javax.xml.bind</groupId><artifa…...

第三节:在WORD为应用主窗口下关闭EXCEL的操作(1)

【分享成果&#xff0c;随喜正能量】夏日里的遗憾&#xff0c;一定都会被秋风温柔化解。吃素不难&#xff0c;难于不肯捨贪口腹之心。若不贪口腹&#xff0c;有何吃素之不便乎。虽吃华素&#xff0c;不吃素日&#xff0c;亦须少吃。以一切物类&#xff0c;皆是贪生怕死&#xf…...

mybatis 缓存

很久没有弄mybatis了&#xff0c;以至于今天在使用时忘记了一个很重事情&#xff08;缓存&#xff09;&#xff0c;导致始终读取不数据库更新之后的最新的数据&#xff0c;后来折腾了小半天才想起缓存&#xff0c;所有小记住一下关闭mybatis的缓存 mybatis.configuration.cach…...

分布式Redis详解

目录 前言安装redis的俩种方法Redis 与 MySQL的区别Redis可以实现那些功能Redis常用的数据类型有序列表的底层是如何实现的?什么是跳跃表 Redis在Spring中的使用Redis 中为什么单线程比多线程快Redis的分布式锁如何实现Redis 分布式锁可能出现的问题Redis保持数据不丢失的方式…...

揭秘程序员和技师的7大共同点,最后一点绷不住了

大家好&#xff0c;这里是程序员晚枫&#xff0c;周末朋友出去放松回来&#xff0c;给我分析了一下程序员和技师的7个相同点&#xff0c;尤其是最后一点让我彻底绷不住了&#xff01; 我也分享给大家。 1、都有工号。98号技师&#xff0c;380号技师大家都很熟悉了&#xff0c…...

SQL | 使用函数处理数据

8-使用函数处理数据 8.1-函数 SQL可以用函数来处理数据。函数一般是在数据上执行的&#xff0c;为数据的转换和处理提供了方便。 8.1.1 函数带来的问题 每种DBMS都有特定的函数&#xff0c;只有很少一部分函数&#xff0c;是被所有主要的DBMS等同的支持。 虽然所有的类型的…...

基于Dlib库+SVM+Tensorflow+PyQT5智能面相分析-机器学习算法应用(含全部工程源码)+训练及测试数据集

目录 前言总体设计系统整体结构图系统流程图模型流程 运行环境Python 环境TensorFlow环境界面编程环境 模块实现1. 数据预处理2. 模型构建1&#xff09;定义模型结构2&#xff09;交叉验证模型优化 3. 模型训练及保存4. 模型测试1&#xff09;摄像头调用2&#xff09;模型导入及…...

【Flutter】【packages】simple_animations 简单的实现动画

package&#xff1a;simple_animations 导入包到项目中去 可以实现简单的动画&#xff0c; 快速实现&#xff0c;不需要自己过多的设置 有多种样式可以实现[ ] 功能&#xff1a; 简单的用例&#xff1a;具体需要详细可以去 pub 链接地址 1. PlayAnimationBuilder PlayAnima…...

python之matplotlib入门初体验:使用Matplotlib进行简单的图形绘制

目录 绘制简单的折线图1.1 修改标签文字和线条粗细1.2 校正图形1.3 使用内置样式1.4 使用scatter()绘制散点图并设置样式1.5 使用scatter()绘制一系列点1.6 python循环自动计算数据1.7 自定义颜色1.8 使用颜色映射1.9 自动保存图表练习题 绘制简单的折线图 绘制一个简单折线图…...

[Linux kernel] [ARM64] boot 流程梳理

一、启动汇编代码部分 0. 链接文件找代码段入口 – _text arch/arm64/kernel/vmlinux.lds.S ENTRY(_text). KIMAGE_VADDR;.head.text : {_text .;HEAD_TEXT}.text : ALIGN(SEGMENT_ALIGN) { /* Real text segment */_stext .; /* Text and read-only data */IRQENTRY_TE…...

重建二叉树

输入一棵二叉树前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同&#xff1b;输入的前序遍历和中序遍历一定合法&#xff1b; 数据范围 树中节点数量范围 [0,100] 。 样例 给定&#xff1a; 前序遍历是&#xff1a;[3, 9, 2…...

支付整体架构

5.4 支付的技术架构 架构即未来&#xff0c;只有建立在技术架构设计良好的体系上&#xff0c;支付机构才能有美好的未来。如果支付的技术体系在架构上存在问题&#xff0c;那么就没有办法实现高可用性、高安全性、高效率和水平可扩展性。 总结多年来在海内外支付机构主持和参与…...

百度智能云:千帆大模型平台接入Llama 2等33个大模型,上线103个Prompt模板

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…...

烦人的幻灯片——拓扑排序

烦人的幻灯片 烦人的幻灯片问题描述输入输出格式输入格式输出格式 输入输出样例输入样例&#xff1a;输入样例一&#xff1a;输入样例二&#xff1a; 输出样例&#xff1a;输出样例一&#xff1a;输出样例二&#xff1a; 正确做法拓扑排序 代码 烦人的幻灯片 问题描述 李教授…...

无涯教程-Perl - ord函数

描述 此函数返回EXPR指定的字符的ASCII数值,如果省略则返回$_。例如,ord(A)返回值为65。 语法 以下是此函数的简单语法- ord EXPRord返回值 该函数返回整数。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -wprint("ord() ", ord(G), "\n"…...

Python爬虫:js逆向调式操作及调式中遇到debugger问题

Python爬虫:js逆向调式操作及调式中遇到debugger问题 1. 前言2. js逆向调式操作2.1 DOM事件断点2.2 XHR/提取断点(用于请求接口参数加密处理)2.3 请求返回的数据是加密的2.4 hook定位参数 3. 调式中遇到debugger问题3.1 解决方式(一律不在此处暂停)3.2 问题&#xff1a;点击一律…...

HTML网页制作技巧:打造出色的用户体验

HTML是构建网页的基础语言&#xff0c;掌握一些关键的技巧可以帮助您创建出色的用户体验。本文将介绍一些HTML网页制作的技巧&#xff0c;从布局和样式到交互和可访问性&#xff0c;为您提供有用的指导。无论您是初学者还是有经验的开发者&#xff0c;这些技巧都将对您的网页设…...

单入射方向光波导耦合光栅的优化

摘要 将光耦合到光波导在现代光学的各种应用中具有重要意义。在VirtualLab Fusion中&#xff0c;使用傅里叶模态法(FMM&#xff0c;也称为RCWA)和参数优化工具&#xff0c;可以优化真实的光栅几何形状&#xff0c;以实现特定衍射级次的最佳耦合效率。本例展示了针对特定入射方…...

AI优化电动汽车充电:PSO算法与GPU加速实践

1. 电动汽车充电优化的AI革命&#xff1a;从理论到实践作为一名长期关注能源与AI交叉领域的技术从业者&#xff0c;我最近被加拿大皇家军事学院(RMC)团队的研究成果所震撼。他们开发的这套基于粒子群优化(PSO)算法的实时充电调度系统&#xff0c;完美诠释了如何用AI技术解决电动…...

基于全域数学的宇宙螺旋场统一结构研究【乖乖数学】

基于全域数学的宇宙螺旋场统一结构研究【乖乖数学】 作者&#xff1a;乖乖数学 时间&#xff1a;20260422根据您提供的文档《基于全域数学的宇宙螺旋场统一结构研究》&#xff0c;我为您总结其核心内容如下&#xff1a; 一、核心目标 该研究旨在打破物理学、化学和生物学之间的…...

终极游戏音频解密指南:如何使用acbDecrypter快速提取加密音频

终极游戏音频解密指南&#xff1a;如何使用acbDecrypter快速提取加密音频 【免费下载链接】acbDecrypter 项目地址: https://gitcode.com/gh_mirrors/ac/acbDecrypter 你是否遇到过想要提取游戏中的背景音乐或音效&#xff0c;却发现音频文件被加密无法直接播放&#x…...

蓝牙耳机控制手机音乐的幕后功臣:一文搞懂AVRCP协议(附PASS THROUGH指令详解)

蓝牙耳机控制手机音乐的幕后功臣&#xff1a;AVRCP协议深度解析与实战指南 当你在通勤路上用蓝牙耳机轻触"下一曲"按钮时&#xff0c;背后是一套精密的无线控制协议在发挥作用。AVRCP&#xff08;Audio/Video Remote Control Profile&#xff09;作为蓝牙技术联盟定义…...

Blazor + WASI + .NET AOT三重编译链曝光:2026边缘计算场景下首例亚毫秒级首屏加载实录

第一章&#xff1a;Blazor WASI .NET AOT三重编译链的诞生背景与技术动因Web 应用正经历从“运行时依赖”向“零依赖、跨平台、确定性执行”的范式迁移。传统 Blazor WebAssembly 依赖 Mono WebAssembly 运行时&#xff0c;虽支持 .NET 生态&#xff0c;但启动延迟高、内存占…...

别再手动建模了!3DMAX 2011+ 用户必看:这个螺母螺栓插件,5分钟搞定标准件

3DMAX高效建模革命&#xff1a;参数化螺母螺栓插件深度解析 在机械设计与工业产品建模领域&#xff0c;标准件的重复创建一直是设计师的痛点。传统手动建模一颗符合国标的六角螺母&#xff0c;熟练设计师至少需要15分钟调整参数和检查尺寸&#xff0c;而一个中等复杂度的装配体…...

新型隐形眼镜利用微流控技术:实时监测眼压,自动给药治疗青光眼!

隐形眼镜新突破&#xff1a;监测与治疗青光眼 一种新型隐形眼镜设计利用微流控技术来测量青光眼患者的眼压&#xff0c;并自动给药。全球有超过 8000 万人患有青光眼&#xff0c;这使其成为全球第二大常见致盲原因。这种疾病由眼内压升高损害视神经引起&#xff0c;目前无法治愈…...

手机热点+ESP-01S:零路由器环境下,手把手搞定TCP客户端与服务器双向通信

手机热点ESP-01S&#xff1a;零路由器环境下实现TCP双向通信的实战指南 在移动开发或物联网原型设计中&#xff0c;我们常遇到没有传统路由器的临时场景——可能是校园实验室的角落、户外测试场地&#xff0c;或是深夜宿舍断电后的应急调试。这时&#xff0c;手机热点成为最可靠…...

如何突破Intel CPU性能瓶颈:智能电压调节工具的终极指南

如何突破Intel CPU性能瓶颈&#xff1a;智能电压调节工具的终极指南 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility 你是否曾被…...