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

news2024/12/28 20:52:26

文章目录

  • 一. 什么是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指令,将请求分发给多个后端服务器,以提高系统的性能和可靠性

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

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

相关文章

通过matlab对比music,mvdr以及tdoa三种定位算法的性能

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MUSIC(Multiple Signal Classification) 4.2 MVDR(Minimum Variance Distortionless Response) 4.3 TDOA(Time Difference o…

使用宝塔面板轻松部署云服务器

作者 : SYFStrive 博客首页 : HomePage 📜: 宝塔面版 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f449…

LeetCode[164]最大间距

难度:Hard 题目: 给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 示例 1: 输入: …

docsify gitee 搭建个人博客

docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm:1.2 在macOS上安装npm:1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html,定制化开发页面…

如何创造千亿项目?合法合规的绿色消费增值积分,或许能冲出赛道

电商行业的竞争越来越激烈,大部分的电商平台都面临着这三大难题:如何吸引用户、如何留存用户以及如何让用户为平台带来更多的效益。为了解决这三大问题,我们提出了创造千亿项目的商业模式——绿色消费增值积分系统,帮助企业冲出赛…

git 给仓库添加新分支并上传代码,git 克隆指定分支

git 克隆指定分支 git clone -b 分支名 仓库地址 例如: git clone -b dev https://gitee.com/UserGuan/spring-boot-demo.git git 给仓库添加新分支并上传代码 1、初始化仓库 git init 2、创建分支并命名 git checkout -b 分支名 例如: git che…

分布式应用:Zabbix监控Nginx

目录 一、理论 1.Zabbix监控Nginx 二、实验 1.Zabbix监控Nginx部署 三、问题 1.重启zabbix客户端失败 2.zabbix服务端测试客户端nginx状态失败 3.nginx启动失败 4.权限不够 一、理论 1.Zabbix监控Nginx (1)环境 zabbix服务端:192.1…

从零构建深度学习推理框架-7 计算图的表达式

什么是表达式 表达式就是一个计算过程,类似于如下: output_mid input1 input2 output output_mid * input3用图形来表达就是这样的。 但是在PNNX的表达式(Experssion Layer)中不是这个样子,而是以一种抽象得方式,…

1.阿里云对象存储OSS

1.对象存储概述 文件上传,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务,需要有存储的支持…

山西电力市场日前价格预测【2023-08-13】

日前价格预测 预测明日(2023-08-13)山西电力市场全天平均日前电价为351.64元/MWh。其中,最高日前电价为404.00元/MWh,预计出现在19: 30。最低日前电价为306.39元/MWh,预计出现在13: 15。 价差方向预测 1: 实…

【vue3】vue3中父子组件传参:

文章目录 一、父传子:二、父调用子方法:三、子组件发送emit方法给父组件: 一、父传子: 【1】父组件传值: 【2】子组件接收: 二、父调用子方法: 【1】父组件调用: 【2】子组件暴…

C++ 学习系列 二 -- RAII 机制

一 什么是 RAII ? RAII (Resource Acquisition Is Initialization)是由c之父Bjarne Stroustrup提出的,中文翻译为资源获取即初始化, 其含义是:用局部对象来管理资源的技术,这里所说的资源指的是…

【杨辉三角的两种解法——(超级详细)】

杨辉三角 1.杨辉三角简介🕵️ 杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600…

Python 11道字典练习题

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 有字典 dic {“k1”: “v1”, “k2”: “v2”, “k3”: “v3”},实现以下功能: 1、遍历字典 dic 中所有的key 参考答案: dic {k1: v1,k2:v2,k3:v3}for k in dic.keys():print(k)2、遍历…

【高阶数据结构】AVL树详解(图解+代码)

文章目录 前言1. AVL树的概念2. AVL树结构的定义3. 插入(仅仅是插入过程)4. 平衡因子的更新4.1 为什么要更新平衡因子?4.2 如何更新平衡因子?4.3 parent更新后,是否需要继续往上更新?4.4 平衡因子更新代码实…

【最全Kubernetes容器编排安装教程】

文章目录 环境准备主机间做信任使用ssh-copy-id命令实现免密登录的安装与配置1. 安装Git Bash软件2. 生成公钥3. SSH登录Linux服务器4. 公钥复制到Linux服务器5. SSH免密登录测试 安装ansible工具 升级内核版本使用elrepo源升级内核查看最新版内核安装最新的内核版本设置系统默…

C语言的链表的相关操作

本变博客源于自己想复习一下C语言&#xff0c;所以便自己动手复习了一下链表的相关操作。做个人记录使用。 main.c #include <stdio.h> #include "list.h"int main() {student *a;printf("hello world\n") ;printf("----初始化列表----------\…

阻塞队列的安全实现,定时器的安全实现(面试易考),超详细

一、&#x1f49b; 如何实现一个线程安全的阻塞队列 目前&#xff0c;当前代码是循环队列&#xff08;还没有进行改动&#xff09; head和tail的判空判断满两种方法: 1.浪费一个格子&#xff0c;当前走到head的前一个位置&#xff0c;就认为队列满的 2.单独搞一个变量&#xff…

【分布式系统】聊聊分布式事务中原子性

什么是分布式事务 在分布式系统中&#xff0c;一个是计算问题&#xff0c;也就是将多个任务&#xff0c;通过流控技术把不同的流量分发给不同的服务器进行处理。另一个就是存储&#xff0c;而只要设计的存储&#xff0c;就必然会引入从单体事务中衍生除的分布式事务问题。 事务…

css flex 上下结构布局

display: flex; flex-flow: column; justify-content: space-between;