Nginx 基础介绍(二)|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 快速学习 Nginx 基础介绍(二)

开发者学堂课程【Nginx 企业级 Web 服务实战:Nginx 基础介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/649/detail/10752


Nginx 基础介绍(二)

1.2: Nginx 组织结构:

web 请求处理机制:

①多进程方式:

服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,各子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。

②多线程方式:

与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了 web 服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,另外一旦主进程挂掉则所有子线程都不能工作了,llS 服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

1.2.1:组织模型:

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

图片10.png

(1)主进程(master process)的功能:

读取 Nginx 配置文件并验证其有效性和正确性建立、绑定和关闭 socket 连接:一个用户连接到 nginx 会有一个公网地址和端口

按照配置生成、管理和结束工作进程

接受外界指令,比如重启、升级及退出服务器等指令

不中断服务,实现平滑升级,重启服务并应用新的配置

改变配置文件,使之生效,一般不重启服务,直接是使用命令 nginx -s reload

开启日志文件,获取文件描述符:

访问日志 access.log :每天的访问量、向后端服务的转发时间、日志监控

错误日志 error.log

不中断服务,实现平滑升级,升级失败进行回滚处理编译和处理perl脚本 : 升级之前,输入指令 nginx -t 可以测试配置是否存在问题

(2)工作进程(woker process)的功能:

接受处理客户的请求

将请求依次送入各个功能模块进行处理

IO调用,获取响应数据

与后端服务器通信,接收后端服务器的处理结果

缓存数据,访问缓存索引,查询和调用缓存数据:一般公共存储中使用,在 nginx 中开辟一个小型空间,当用户第一次访问时,从 NAS 中下载数据到公共存储中,第二次访问相同资源时,直接从空间中返回,而不需要从 NAS 在返回,节省时间。

发送请求结果,响应客户的请求

接收主程序指令,比如重启、升级和退出等

下图为 Nginx 逻辑图:

图片11.png

一个 Master 进程派生出多个 Woker 工作进程,工作进程中会加载多个核心模块。用户发起 http 请求,进程根据 I/O 类型,转发到相应模块进行处理。

Master 和 woker 之间,升级不中断服务。Backend(后端服务):包括 Web Server、Application server、Memcached。

Woker 进程调用 I/O 服务,类型有 Advanced I/O,sendfile,AIO,mmap etc.

2.2.2:进程间通信:

工作进程是由主进程生成的,主进程使用 fork() 函数,在 Nginx 服务器启动过程中主进程根据配置文件决定启动工作进程的数量,然后建立一张全局的工作表用于存放当前未退出的所有的工作进程,主进程生成工作进程后会将新生成的工作进程加入到工作进程表中,并建立一个单向的管道并将其传递给工作进程,该管道与普通的管道不同,它是由主进程指向工作进程的单向通道,包含了主进程向工作进程发出的指令、工作进程 ID、工作进程在工作进程表中的索引和必要的文件描述符等信息。

主进程与外界通过信号机制进行通信,当接收到需要处理的信号时,它通过管道向相关的工作进程发送正确的指令,每个工作进程都有能力捕获管道中的可读事件,当管道中有可读事件的时候,工作进程就会从管道中读取并解析指令,然后采取相应的执行动作,这样就完成了主进程与工作进程的交互。

工作进程之间的通信原理基本上和主进程与工作进程之间的通信是一样的,只要工作进程之间能够取得彼此的信息,建立管道即可通信,但是由于工作进程之间是完全隔离的,因此一个进程想要知道另外一个进程的状态信息就只能通过主进程来设置了。

为了实现工作进程之间的交互,主进程在生成工作进程只之后,在工作进程表中进行遍历,将该新进程的 ID 以及针对该进程建立的管道句柄传递给工作进程中的其他进程,为工作进程之间的通信做准备,当工作进程1向工作进程2发送指令的时候,首先在主进程给它的其他工作进程工作信息中找到2的进程 IO,然后将正确的指令写入指向进程2的管道,工作进程2捕获到管道中的事件后,解析指令并进行相关操作,这样就完成了工作进程之间的通信。

下图为 Nginx 主进程与工作进程的通信过程:

图片12.png

2.3:Nginx 模块介绍:

核心模块∶是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能

标准 HTTP 模块︰提供 HTTP 协议解析相关的功能,比如:端口配置、网页编码设置、HTTP 响应头设置等等

可选 HTTP 模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如: Flash 多媒体传输、解析 GeolP 请求、网络传输压缩、安全协议 SSL 支持等

邮件服务模块∶主要用于支持 Nginx 的邮件服务,包括对 POP3 协议、IMAP 协议和SMTP 协议的支持

第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、Lua 支持等

nginx 高度模块化,但其模块早期不支持 DSO 机制;1.9.11版本支持动态装载和卸载

模块分类:

核心模块:core module

标准模块:

HTTP 模块: ngx_http_*

HTTP core modules 默认功能

HTTP 0ptional modules 需编译时指定

Mail  模块  ngx_mail_*

stream 模块 ngx_stream_*

第三方模块

图片13.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
tengine Rust 负载均衡
反向代理学习笔记(一) Nginx与反向代理绪论
反向代理学习笔记(一) Nginx与反向代理绪论
|
6月前
|
Kubernetes 应用服务中间件 nginx
nginx-ingress学习笔记
nginx-ingress学习笔记
135 0
|
前端开发 应用服务中间件 nginx
前端学习笔记202305学习笔记第二十三天-nginx项目部署500情况
前端学习笔记202305学习笔记第二十三天-nginx项目部署500情况
61 0
|
缓存 负载均衡 应用服务中间件
|
负载均衡 前端开发 应用服务中间件
Nginx学习笔记
Nginx学习笔记
|
JavaScript 前端开发 应用服务中间件
前端学习笔记202305学习笔记第二十三天-vue打包nginx部署
前端学习笔记202305学习笔记第二十三天-vue打包nginx部署
82 0
|
应用服务中间件 Linux nginx
nginx基础模块详解
nginx基础模块详解
174 0
nginx基础模块详解
|
监控 网络协议 应用服务中间件
Nginx基础配置
Nginx基础配置
115 0
Nginx基础配置
|
缓存 算法 前端开发
网站流量日志埋点收集—后端脚本(nginx+lua)|学习笔记
快速学习网站流量日志埋点收集—后端脚本(nginx+lua)
581 0
网站流量日志埋点收集—后端脚本(nginx+lua)|学习笔记
|
负载均衡 Java 应用服务中间件
案例开发-搭建 fastDSF 加 Nginx 文件服务器| 学习笔记
快速学习案例开发-搭建 fastDSF 加 Nginx 文件服务器。
案例开发-搭建 fastDSF 加 Nginx 文件服务器| 学习笔记