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

初始nginx

华子目录

  • nginx介绍
  • nginx功能介绍
  • 基础特性
  • web服务相关功能
  • `nginx进程结构`
    • `web请求处理机制`
  • `nginx进程间通信`
  • nginx启动与http连接建立
    • http处理过程
  • `nginx模块介绍`
  • nginx命令演示

nginx介绍

  • nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器

  • nginx官网:http://nginx.org

  • nginx其它二次发行版

  • Tengine:由淘宝网发起的Web服务器项目。它在Nginx基础上,针对大访问量网站需求,添加了很多高级功能特性Tengine性能稳定性已经在大型网站淘宝网天猫商城等得到了很好检验。它的最终目标是打造一个高效、稳定、安全、易用Web平台。从2011年12月开始Tengine成为一个开源项目官网: http://tengine.taobao.org/
  • OpenResty:基于NginxLua语言高性能Web平台章亦春团队开发官网:http://openresty.org/cn/

nginx功能介绍

  • 静态web资源服务器html,图片,js,css,txt等静态资源
  • http/https协议反向代理
  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议请求转发反向代理
  • imap4/pop3协议反向代理

基础特性

  • 模块化设计,较好的扩展性
  • 高可靠性
  • 支持热部署不停机更新配置文件升级版本更换日志文件
  • 低内存消耗10000keep-alive连接模式下的非活动连接,仅需2.5M内存
  • event-driven,aio,mmap,sendfile

web服务相关功能

  • 虚拟主机server
  • 支持keep-alive管道连接(利用一个连接做多次请求)
  • 访问日志支持基于日志缓冲提高其性能
  • url rewirte
  • 路径别名
  • 基于IP用户访问控制
  • 支持速率限制并发数限制
  • 重新配置在线升级而无需中断客户的工作进程

nginx进程结构

web请求处理机制

  • 多进程方式服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势处理速度快子进程之间相互独立,但是如果访问过大导致服务器资源耗尽无法提供请求
  • 多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程此客户端进行交互一个线程开销远远小于一个进程,因此多线程方式在很大程度减轻web服务器系统资源要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉所有子线程不能工作了IIS服务器使用了多线程的方式,需要间隔一段时间重启一次才能稳定

Nginx多进程组织模型,而且是一个由Master主进程多个Worker工作进程组成

在这里插入图片描述
主进程(master process)的功能

  • 对外接口:接收外部操作信号
  • 对内转发:根据外部操作的不同,通过信号管理Worker
  • 监控:监控worker进程运行状态worker进程异常终止后,自动重启worker进程
  • 读取Nginx配置文件并验证其有效性正确性
  • 建立、绑定关闭socket连接
  • 按照配置生成、管理和结束worker工作进程
  • 接受外界指令,比如重启、升级及退出服务器指令
  • 不中断服务,实现平滑升级,重启服务并应用新的配置
  • 开启日志文件,获取文件描述符
  • 不中断服务,实现平滑升级升级失败进行回滚处理
  • 编译和处理perl脚本

工作进程worker process)的功能

  • 所有Worker进程都是平等的
  • 实际处理网络请求,由Worker进程处理
  • Worker进程数量:一般设置核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源worker进程数量一般与cpu核心数一一对应
  • 增加上下文切换损耗
  • 接受处理客户请求
  • 请求依次送入各个功能模块进行处理
  • I/O调用,获取响应数据
  • 后端服务器通信,接收后端服务器处理结果
  • 缓存数据访问缓存索引查询调用缓存数据
  • 发送请求结果响应客户请求
  • 接收主程序指令,比如重启、升级和退出

在这里插入图片描述

nginx进程间通信

  • 工作进程是由主进程生成的,主进程使用fork()函数Nginx服务器启动过程主进程根据配置文件决定启动worker工作进程数量,然后建立一张全局的工作表用于存放当前未退出的所有的workder工作进程主进程生成worker工作进程后会将新生成的worker工作进程加入到worker工作进程表中,并建立一个单向的管道并将其传递给worker工作进程,该管道普通的管道不同,它是由主进程指向工作进程单向通道,包含了主进程工作进程发出的指令、工作进程ID、工作进程在工作进程表中的索引和必要的文件描述符等信息
  • 主进程外界通过信号机制进行通信,当接收需要处理的信号时,它通过管道相关的工作进程发送正确的指令每个工作进程都有能力捕获管道中可读事件,当管道中有可读事件时候工作进程就会从管道中读取并解析指令,然后采取相应的执行动作,这样就完成了主进程工作进程交互
  • worker进程之间的通信原理基本上和主进程worker进程之间通信一样的,只要worker进程之间能够取得彼此的信息,建立管道即可通信,但是由于worker进程之间完全隔离的,因此一个进程想要知道另外一个进程状态信息,就只能通过主进程实现
  • 为了实现worker进程之间交互master进程在生成worker进程之后,在worker进程表中进行遍历,将该新进程的PID以及针对该进程建立的管道句柄传递给worker进程中的其他进程,为worker进程之间通信准备,当worker进程1worker进程2发送指令的时候,首先在master进程给它的其他worker进程工作信息中找到2进程PID,然后将正确的指令写入指向进程2的管道worker进程2捕获到管道中的事件后,解析指令并进行相关操作,这样就完成了worker进程之间的通信
  • 另外worker进程可以通过共享内存通讯,比如upstream中的zone,或者limit_reqlimit_conn中的zone等。操作系统提供了共享内存机制

在这里插入图片描述

nginx启动与http连接建立

在这里插入图片描述

  • Nginx启动时Master进程加载配置文件
  • Master进程初始化监听socket
  • Master进程fork多个Worker进程
  • Worker进程,竞争新的连接获胜方通过三次握手建立Socket连接,并处理请求

http处理过程

在这里插入图片描述

nginx模块介绍

nginx多种模块

  • 核心模块:是Nginx服务器正常运行必不可少模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理核心功能
  • 标准HTTP模块:提供HTTP协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置等等
  • 可选HTTP模块:主要用于扩展标准的HTTP功能,让Nginx能处理一些特殊的服务,比如:Flash
  • 多媒体传输 、解析GeoIP请求网络传输压缩安全协议SSL支持
  • 邮件服务模块:主要用于支持Nginx邮件服务,包括对POP3协议IMAP协议SMTP协议支持
  • Stream服务模块:实现反向代理功能,包括TCP协议代理
  • 第三方模块:是为了扩展Nginx服务器应用,完成开发者自定义功能,比如:Json支持Lua支持

模块分类:

核心模块:core module
标准模块:
HTTP模块: ngx_http_*
Mail模块: ngx_mail_*
Stream模块:ngx_stream_*
第三方模块

在这里插入图片描述

nginx命令演示

#-v只会列出nginx的版本
[root@nginx-node1 ~]# nginx -v
nginx version: nginx/1.24.0#-V会列出编译时用到的模块和nginx版本
[root@nginx-node1 ~]# nginx -V
nginx version: nginx/1.24.0
built by gcc 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC)
built with OpenSSL 3.0.1 14 Dec 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module
#-t检查nginx主配置是否正确
[root@nginx-node1 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

相关文章:

初始nginx

华子目录 nginx介绍nginx功能介绍基础特性web服务相关功能nginx进程结构web请求处理机制 nginx进程间通信nginx启动与http连接建立http处理过程 nginx模块介绍nginx命令演示 nginx介绍 nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服…...

vulnhub靶场 Empire LupinOne

使用命令查看靶机ip,访问ip arp-scan -l 使用御剑扫描一下子域名,但是没有获取到什么有用的信息 这是一个Apache文档,没有什么用 紧接着我们尝试暴力破解,这里推荐使用ffuf工具暴力破解目录,kali自带的ffuf扫描速度贼快 参数解释…...

6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]

Gin 是一个用 Go 语言编写的 HTTP Web 框架,以其高性能和简洁的 API 而闻名。它提供了一套强大的路由功能,使得开发者可以轻松地定义 URL 路由规则,并将这些规则映射到具体的处理函数(handler)。以下是关于 Gin 路由的…...

使用Lodash工具库的orderby和sortby进行排序的区别

简介 _.orderBy 和 _.sortBy 是 Lodash 库中用于排序数组的两个函数。 区别 _.orderBy 允许你指定一个或多个属性来排序,并为每个属性指定排序方向(升序或降序)。默认所有值为升序排,指定为"desc" 降序&#xff0c…...

CSS面试题|[2024-12-24]

1.说一下CSS的盒模型 在HTML页面中的所有元素都可以看成是一个盒子 盒子的组成:内容content、内边距padding、边框border、外边距margin 盒模型的类型: 标准盒模型 margin border padding content IE盒模型 margin content(包括border p…...

flask-admin 在modelview 视图中重写on_model_change 与after_model_change

背景: 当我们在使用flask-admin进行WEB开发时应该第一时间想到的是竟可能使用框架推荐的modelView模型,其次才是自定义模型 baseview,因为只有modelview模型下开发才能最大限度的提高效率。 制作: 1、在modelview视图下框架会通过默认视图…...

Excel粘贴复制不完整的原因以及解决方法

在数据处理和分析的过程中,Excel无疑是不可或缺的工具。然而,在使用Excel进行复制粘贴操作时,有时会遇到粘贴不完整的情况,这可能会让人感到困惑和烦恼。本文将深入探讨Excel粘贴复制不完整的原因、提供解决方案,并给出…...

【深度学习环境】NVIDIA Driver、Cuda和Pytorch(centos9机器,要用到显示器)

文章目录 一 、Anaconda install二、 NIVIDIA driver install三、 Cuda install四、Pytorch install 一 、Anaconda install Step 1 Go to the official website: https://www.anaconda.com/download Input your email and submit. Step 2 Select your version, and click i…...

Cocos Creator 3.8.5 正式发布,更小更快更多平台!

在 Cocos Creator 3.8.5 版本中,我们做了新一轮的优化。 在加载速度、代码裁剪、平台增强等多方面做了优化,提升了开发者体验和游戏性能。 希望能够助 Cocos 开发者们的产品更上一层楼。 一、加载速度优化 1、WASM 模块延迟加载 在早期版本中&#xff0c…...

Python中构建终端应用界面利器——Blessed模块

在现代开发中,命令行应用已经不再仅仅是一个简单的文本输入输出工具。随着需求的复杂化和用户体验的重视,终端界面也逐渐成为一个不可忽视的设计环节。 如果你曾经尝试过开发终端UI,可能对传统的 print() 或者 input() 函数感到不满足&#…...

Android 15 状态栏闹钟图标不显示问题修复

Android 15 状态栏闹钟图标不显示问题修复 问题描述 在 Android 15 系统中,发现即使设置了闹钟,状态栏也不会显示闹钟图标。这个问题影响了用户及时查看闹钟状态的体验。 问题分析 通过查看 SystemUI 的配置文件,发现在 frameworks/base/packages/SystemUI/res/values/conf…...

数据采集背后的效率革命:如何优化你的爬虫性能

在爬虫技术日益发展的今天,性能优化成为提升数据采集效率的关键。面对日益复杂的网页结构和庞大的数据量,高效的爬虫能够显著降低运行时间和资源成本。本文将围绕爬虫性能优化的核心方法展开讨论,并通过实例对比多进程、多线程以及普通爬取的…...

【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题

当我们从Kotlin Multiplatform Wizard | JetBrains 下载ComposeMultiplatform项目时 会遇到无法正常编译/运行的情况,一般网页和桌面是可以正常编译的, 我这里着重解决如下问题 1:Gradle版本不兼容或者Gradle连接超时 2:JDK版本不兼容 3:Gradle依赖库连…...

《计算机组成及汇编语言原理》阅读笔记:p128-p132

《计算机组成及汇编语言原理》学习第 10 天,p128-p132 总结,总计 5 页。 一、技术总结 1.8088 organization and architecture 8088处理器是16位电脑,寄存器是16位,数据总线(data bus)是8位,地址总线是20位。 (1)g…...

使用 OpenCV 在图像中添加文字

在图像处理任务中,我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数,可以很方便地在图像上绘制文本,支持多种字体、颜色、大小和位置等参数。 本文将详细介绍如何使用 OpenCV 在图像中添加文字,介绍 cv2.putTe…...

实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4

大家好,我是Q,邮箱:1042484520qq.com。 今天我们在上几讲的基础上再扩展下 Cabin Wi-Fi 的功能需求,讲讲如何使能 5G TCU Wi-Fi STA Bridge 模式。 参考: 实现某海外大型车企(T)Cabin Wi-Fi 需求…...

Linux系统:内核态与用户态的深层思考

背景: 我们学习Linux的系统调用经常会遇到一个概念:“内核态和用户态的切换”,一般人只会告诉你说这个切换代价很大,具体是什么情况?为什么需要切换?一定需要切换吗?怎么就会触发切换&#xff1…...

# 光速上手 - JPA 原生 sql DTO 投影

前言 使用 JPA 时,我们一般通过 Entity 进行实体类映射,从数据库中查询出对象。然而,在实际开发中,有时需要自定义查询结果并将其直接映射到 DTO,而不是实体类。这种需求可以通过 JPA 原生 SQL 查询和 DTO 投影 来实现…...

ASP.NET Web应用程序出现Maximum request length exceeded报错

一、问题描述 在ASP.NET的web应用中,导出数据时出现500 - Internal server error.Maximum request length exceeded。 二、原因分析 这个错误通常出现在Web应用程序中,表示客户端发送的HTTP请求的长度超过了服务器配置的最大请求长度限制。这可能是因为…...

HTML——16.相对路径

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><a href"../../fj1/fj2/c.html" target"_blank">链接到c</a><!--相对路径&#xff1a;-->…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...