当前位置: 首页 > 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;-->…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...