NGINX学习笔记(一):一篇了解NGINX的基本概念

news2024/11/13 20:27:10

NGINX是什么?

NGINX是一款由俄罗斯人伊戈尔·赛索耶夫使用C语言开发的、支持热部署的、轻量级的WEB服务器/反向代理服务器/电子邮件代理服务器,因为占用内存较少,启动极快,高并发能力强,所以在互联网项目中广泛应用。可以在 UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及 Microsoft Windows 等操作系统中运行。

  • 官网:NGINX官方网站
  • 中文:NGINX中文网站

NGINX可以干什么?

NGINX可以作为静态页面的WEB服务器,同时还支持CGI协议的动态语言,比如Perl、PHP等。NGINX专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,NGINX在官方测试中,能够支持五万个平行链接,而在实际的运作中,可以支持二万至四万个平行链接,总结如下:

  • 静态页面的WEB服务器
  • 动静分离
  • 客户端的正向代理
  • 服务端的反向代理
  • 服务端的负载均衡

什么是简单请求?

请求同时满足以下两个条件,称为简单请求,否则为复杂请求

  1. 请求方式是HEAD、GET、POST 三种之一;
  2. 请求头包含但不超过这五个字段:Accept,Accept-Language,content-Language,Last-Event-ID,Content-Type。其中Content-Type的值只能是application/x-www-form-urlencoded,text/plain,multipart/form-data 三种之一。

什么是复杂请求?

凡是不简单请求的,都属于复杂请求,常见的复杂请求:

  1. 请求方法是 PUT 或 DELETE的请求;
  2. 请求头的Content-Type 值为application/json的请求

什么是动静分离?

动静分离,其实就是使用NGINX的特性,将客户端发来的请求分为动态请求和静态请求。静态请求直接从NGINX服务器所设定的根目录去获取对应的资源,动态请求则转发给真实的后端服务去处理。这样不仅能够减轻应用服务器的压力,将后台API接口服务化,还能将前后端代码分开并行开发和部署。一般常见于SPRINGBOOT + VUE的项目中。
那么,如何配置呢?

什么是正向代理?

正向代理隐藏了真实的客户端,VPN其实就是一个正向代理工具。当使用VPN访问墙外网站是,VPN将访问请求,代理到一个可以访问该网站的代理服务器上,代理服务器把墙外服务器上获取的请求结果,再转发给客户端,这就是正向代理。
在这里插入图片描述

什么是反向代理?

反向代理隐藏了真实的服务端,当我们访问百度时,其实内部会进行一个转发,将请求代理到内网去,但是具体是哪一台,我们不知道,我们也不需要知道,这就是所谓的反向代理,即反向代理“代理”的是服务器端,且这个过程对于客户端而言是透明的。
负载均衡采用的就是反向代理。
在这里插入图片描述

什么是负载均衡?

在互联网项目中,当遇到请求爆发式增长的情况时,单个服务器无法处理客户端请求,需要使用多个服务器来分摊压力,这就是负载均衡的初衷。
在这里插入图片描述

NGINX是如何工作的?

NGINX采用MASTER-WORKER的模式,NGINX在启动后,会以守候进程的方式在后台运行,启动后包含一个MASTER进程和多个WORKER进程,WORKER进程以非root用户运行,当然也可以在配置文件中配置运行 WORKER进程的用户。
在这里插入图片描述
WORKER进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个WORKER进程。
在这里插入图片描述

那么,如何配置WORKER的用户以及进程数呢?

NGINX的整体架构在这里插入图片描述

  1. MASTER进程:不处理请求,主要负责加载和分析配置文件、分配请求给WORKER节点、管理WORKER进程、平滑升级、服务重启、热加载、热部署等;
  2. WORKER进程:接收客户端请求、将请求一次送入各模块过滤、I/O 调用、数据缓存、发送响应;
  3. 缓存相关进程:包括cache loader(缓存索引重建) 与 cache manager( 缓存索引管理) 两部分:
    • Cache loader ,在NGINX服务启动后由主进程生成,根据本地磁盘上缓存建立索引元数据库后退出;
    • Cache manager ,在元数据更新完成后,对元数据是否过期做出判断。

NGINX是如何热加载的?

所谓热部署,就是配置文件nginx.conf修改后,不需要停止NGINX服务,不需要中断请求,就能让配置文件生效!但是,NGINX必须重新加载一下nginx.conf,否则修改不生效。
使用如下命令,重新加载配置文件:

nginx -s reload

当配置文件nginx.conf修改后,需要执行重新加载配置的指令,此时NGINX接收到热加载的信号后,会重新生成新的WORKER进程,当然也是以新的配置进行请求处理的,而且新的请求一定会交给新的WORKER进程。当老的WORKER进程处理完请求后,进程会被杀死。

NGINX的目录结构

我是手动编译安装的,在安装时设置安装文件的路径(将软件安装在:/opt/software/nginx-1.18.0/target目录下), 执行命令:

./configure --prefix=/opt/software/nginx-1.18.0/target --with-http_stub_status_module --with-http_ssl_module

安装完毕以后的目录为:/opt/software/nginx-1.18.0/target

├── client_body_temp                 # POST方式大文件暂存目录
├── conf                             # NGINX所有配置文件的目录
│   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│   ├── fastcgi_params               # fastcgi的参数文件
│   ├── fastcgi_params.default       
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                   #这是NGINX默认的主配置文件, 日常使用和修改的文件, 我们一般都操作这个文件
│   ├── nginx.conf.default
│   ├── scgi_params                  # scgi相关参数文件
│   ├── scgi_params.default  
│   ├── uwsgi_params                 # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi临时数据目录
├── html                             # NGINX默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件, 例如出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # NGINX日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                    # 错误日志文件
│   └── nginx.pid                    # pid文件, NGINX进程启动后, 会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # NGINX可执行文件目录
│   └── nginx                        # NGINX二进制可执行程序
├── scgi_temp                        # 临时目录
└── uwsgi_temp                       # 临时目录

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

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

相关文章

CRM系统的四种数据分析法

在数字化时代,数据就是一切。因此,通过数据来支撑企业决策,才能确保制定的决策在更大程度上保持准确。因此,CRM客户管理系统的数据分析能力不容忽略。CRM获取的客户信息,就是很好的数据支撑样本,让企业从数…

CANfd 一次采样点和二次采样点

CANfd 一次采样点和二次采样点 采样点的定义 采样点是CAN控制器读取总线电平,并解释各个比特的逻辑值的时间点。 首先我们需要了解Tq的概念,Tq是can控制器的最下时间周期称作时间份额(Time quantum,简称Tq),它是通过芯…

2023年3月全国DAMA-CDGA/CDGP数据治理认证招生简章

弘博创新是DAMA中国授权的数据治理人才培养基地,贴合市场需求定制教学体系,采用行业资深名师授课,理论与实践案例相结合,快速全面提升个人/企业数据治理专业知识与实践经验,通过考试还能获得数据专业领域证书。 DAMA认…

嵌入式学习笔记——认识STM32的 GPIO口

寄存器开发STM32GPIO口前言认识GPIOGPIO是什么GPIO有什么用GPIO怎么用STM32上GPIO的命名以及数量GPIO口的框图(重点)输入框图解析三种输入模式GPIO输入时内部器件及其作用1.保护二极管2.上下拉电阻(可配置)3.施密特触发器4.输入数…

Spark 存储系统

Spark 存储系统MemoryStoreDiskStoreSpark 存储系统架构: Spark 存储系统维护的数据 : Shuffle 中间文件 :Shuffle Map 输出数据 , 消耗节点磁盘广播变量 :在 Executors 内保存所有数据 ,消耗节点的内存RDD Cache : 将…

大数据技术之Hive(五)拉链表的设计与实现

一、什么是拉链表针对订单表、订单商品表,流水表,这些表中的数据是比较多的,如果使用全量的方式,会造成大量的数据冗余,浪费磁盘空间。所以这种表,一般使用增量的方式,每日采集新增的数据。在这…

DevOps平台之GitLab 账户个性化设置【二】

1、简介 上一篇文章安装完GITLAB服务之后,我们可以很方便地从浏览器登录上去进行仓库项目管理。 但是初始化的界面默认设备并不是能很好地使用,比如语言,皮肤,个人信息不完善等等。 所以本文就为了完善这些。 上一篇:…

Linux 配置本地yum源

挂载光盘 进入包 配置路径,查看在线yum源 移动在线yum源到/home/目录下 进入vi,任意取名以.repo结尾即可 按住i进行编辑,输入以下内容 注意gpgcheck1是检验,配置本地yum源不需要检验 写入上图内容按住:输入wq,点击回车…

LeetCode - 1653 使字符串平衡的最少删除次数

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1653. 使字符串平衡的最少删除次数 - 力扣(LeetCode) 题目描述 给你一个字符串 s ,它仅包含字符 a 和 b​​​​ 。 你可以删除 s 中任意数目的字符,使得 …

广州银行冲刺A股上市:不良贷款规模突破100亿元,不良率飙升

又一家城商行平移申报IPO。近日,广州银行股份有限公司(下称“广州银行”)递交招股书,准备在深圳证券交易所主板上市。本次冲刺上市,广州银行计划募资约94.79亿元,国泰君安证券为其保荐机构。 截至目前&…

省选模拟测试23 T1直径

题目大意 给你一个数kkk&#xff0c;请你构造一棵节点数量小于等于5000的直径数量为kkk的树。 我们定义这棵树的直径为&#xff0c;所有满足1≤i<j≤n1\leq i<j\leq n1≤i<j≤n的(i,j)(i,j)(i,j)中&#xff0c;dis(i,j)dis(i,j)dis(i,j)最大的。如果有多个这样的(i,…

buu RSA what 1

题目描述&#xff1a; 题目四个文件&#xff0c;分别如下&#xff1a; rsa.py from Crypto.Util.number import bytes_to_long, getPrime from random import randint from gmpy2 import powmodp getPrime(2048) q getPrime(2048) N p*q Phi (p-1)*(q-1) def get_enc_key…

珠海先达盈致数据智能监控器+SaaS平台 轻松实现注塑生产管控

数据智能监控器 兼容市面上99%的注塑设备 直接读取设备生产数据与状态&#xff0c;如&#xff1a;计划产出、实际产出、累计产出、停机、节拍、线利用率、直通率、停产时间、工单状态、OEE、注胶时间…… 产品功能价值 ◎ OEE不达标报警&#xff0c;一手掌握生产效能 ◎ 首…

论文精读:Ansor: Generating High-Performance Tensor Programs for Deep Learning

文章目录1. Abstract2. Introduction3. Background4. Design Overview5. Program Sampling5.1 Sketch Generation5.2 Random Annotation6. Performance Fine-tuning6.1 Evolutionary Search6.2 Learned Cost Model7. Task Scheduler7.1 Problem Formulation7.2 Optimizing with…

使用nvm管理node版本

下载nvm版本参考文章&#xff1a;https://blog.csdn.net/langmanboy/article/details/126357952下载安装选择nvm的目录为d:\nvm&#xff0c;nodejs的目录为d:\nodejs&#xff1a;v14.0.0&#xff1a;执行nvm install 14生成的目录v16.0.0&#xff1a;执行nvm install 16生成的目…

详解vite原理

背景 自从尤大大的 vite 问世后&#xff0c;现在前端的构建工具由 webpack 转向 vite 的越来越多&#xff0c;今天主要来讨论一下 vite 的一些工作原理&#xff0c;讨论之前大家可以看这篇文章&#xff0c;尤其是注意其中谈到的 Bundleless&#xff0c;这样也能更好的理解 vit…

C#学习记录0.1

一、环境 编译器使用 Visual Studio 2022。  IDE(集成开发环境)搭建不做阐述。 二、创建项目与解决方案 打开Visual Studio 2022点击创建新项目&#xff0c;如下图所示。 搜索并选择控制台应用程序&#xff0c;如下图所示。 解决方案&#xff1a;针对用户的具体需要&#x…

RocketMQ【3】Rocketmq集群部署(多master多slave)异步复制

系列文章目录 RocketMQ【1】linux安装配置Rocketmq&#xff08;单机版&#xff09; RocketMQ【2】Rocketmq控制台安装启动&#xff08;单机版&#xff09; 文章目录系列文章目录一、异步复制的优缺点1、优点2、缺点二、架构1、架构图2、介绍3、机器配置三、配置1、master节点配…

ES32中OTA空中升级

打开SDK可视化配置&#xff0c;检查flash大小设定和“partition table”分区表设定。 左下角&#xff0c;点击SDK可视化配置按钮&#xff0c;进入配置。flash大小为4MB&#xff0c;Partition Table选择Factory app, two OTA definitions&#xff0c;分区表烧写偏移地址0x8000&…

关于缓存的理解

关于缓存的理解 为系统引入缓存的理由 通常情况&#xff0c;在我们面临系统的基础设施&#xff0c;例如数据库无法处理量级的请求时候&#xff0c;总是会下意识的使用缓存&#xff0c;这次我们以设计的角度思考&#xff0c;在为你的系统引入缓存之前&#xff0c;它是否真的需…