初始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
:基于Nginx
与Lua语言
的高性能Web平台
,章亦春
团队开发
,官网
:http://openresty.org/cn/
nginx功能介绍
静态
的web
资源服务器html,图片,js,css,txt等静态资源
http/https协议
的反向代理
- 结合
FastCGI/uWSGI/SCGI
等协议反向代理动态资源请求
tcp/udp协议
的请求转发
(反向代理
)imap4/pop3协议
的反向代理
基础特性
模块化设计,较好的扩展性
高可靠性
支持热部署
:不停机更新配置文件
,升级版本
,更换日志文件
低内存消耗
:10000
个keep-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进程1
向worker进程2
发送指令的时候
,首先在master进程
给它的其他worker进程工作信息
中找到2
的进程PID
,然后将正确的指令
写入指向进程2的管道
,worker进程2
捕获到管道
中的事件
后,解析指令
并进行相关操作
,这样就完成了worker进程
之间的通信
- 另外
worker进程
可以通过共享内存
来通讯
,比如upstream
中的zone
,或者limit_req
、limit_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" 降序,…...
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 模块延迟加载 在早期版本中,…...

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的系统调用经常会遇到一个概念:“内核态和用户态的切换”,一般人只会告诉你说这个切换代价很大,具体是什么情况?为什么需要切换?一定需要切换吗?怎么就会触发切换࿱…...

# 光速上手 - 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><!--相对路径:-->…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

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

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

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

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

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