深入浅出Nginx
北海宇微
生命源于感动,感动让我们有了羁绊,让我们有了不舍,让我们在生去生命那—刻可以笑看人生一一一一我来过
展开
-
Nginx源码初探之基础架构 -进程之间的通信
Nginx进程之间的通信机制介绍 进程之间的通信方式如共享内存,套接字、管道、消息队列、信号等。Nginx框架选择了三种方式:共享内存、套接字、信号来访问共享资源。同时Nginx使用了原子操作、信号量、文件锁来实现各个进程直降安全有序的访问资源。1.共享内存 共享内存是Linux下提供的最基本的进程间的通信方式,他通过mmap或者shmget系统调用内存中创建了一块连续...原创 2020-01-18 17:47:13 · 4179 阅读 · 0 评论 -
Nginx源码初探之upstream机制 -UPSTREAM机制介绍
upstream机制介绍 Nginx访问上游服务器主要是基于upstream机制。upstream机制是事件驱动框架与HTTP框架的综合,它既属于HTTP框架的一部分,又可以处于基于TCP的应用层协议。为了帮助Nginx实现反向代理功能,upstream机制处理提供基本的与上游交互的功能之外,还实现里转发上游应用层协议的响应包体到下游客户端的功能。 Nginx访问上...原创 2020-01-18 13:32:27 · 7262 阅读 · 0 评论 -
Nginx源码初探之HTTP模块 -HTTP框架执行流程
HTTP框架主要是针对基于TCP事件框架解决HTTP的网络传输、解析、组装等问题。主要涉及四个方面。第一,集成事件驱动机制,第二HTTP模块协同,第三HTTP框架允许将一个请求分为多个子请求,第四基础工具接口,比如接受HTTP包体,发送HTTP响应头部,响应包体等。。通过HTTP框架处理HTTP请求,探索HTTO请求在Nginx中的生命周期。HTTP框架执行流程和一般的HTTP请求...原创 2020-01-18 12:31:17 · 4223 阅读 · 0 评论 -
Nginx源码初探之HTTP模块 -HTTP框架处理阶段
Nginx模块化设计使得每个HTTP模块都可以专注于完成一个独立的、简单的功能,而一个请求的完整处理过程可以由无数个HTTP模块共同完成。依照常规的HTTP处理流程,Nginx将这些HTTP模块分为11个处理阶段,对于这11个处理阶段,其中有4个是必须有HTTP框架完成的,其他的7个是可以有HTTP模块协同完成。理解这11个阶段有助于理解HTTP框架对HTTP请求的处理。, 并不是说一...原创 2020-01-18 10:23:15 · 4169 阅读 · 0 评论 -
Nginx源码初探之HTTP模块 -HTTP框架初始化流程
静态HTTP框架启动流程 Nginx模块化设计使得每个HTTP模块都可以专注于完成一个独立的、简单的功能,而一个请求的完整处理过程可以由无数个HTTP模块共同完成。依照常规的HTTP处理流程,Nginx将这些HTTP模块分为11个处理阶段。Nginx框架的初始化工作主要就是解析nginx.conf并且将这11个处理阶段依照顺序和相应的模块关联起来。1.HTTP模块配置介绍 ...原创 2020-01-18 09:13:36 · 4167 阅读 · 0 评论 -
Nginx源码初探之事件模块 -定时器实现
Nginx实现了自己的定时器触发机制,与内核无关。用于弥补当内核调用超时等状况下,系统可以主动触发事件。理解定时器主要有两个方面,一个方面是时间管理,另一个方面是定时器的实现方式。1.时间管理 定时间首先要弄清楚时间管理,Nginx使用全局变量用于缓存时间,这样在获取事件的时候只需要直接读取几个缓存变量就可以了,达到提高了执行效率。缓存的时间更新由ngx_epoll...原创 2020-01-17 09:56:03 · 4116 阅读 · 0 评论 -
Nginx源码初探之事件模块 - epoll事件驱动
Nginx事件驱动是根据操作系统以及操作系统内核设计了很多不同的驱动方式,epoll事件驱动机制是Unix系统的事件驱动模式。本文重点介绍ngx_epoll_module是如何基于Linux内核实现epoll事件驱动模型,实理解Nginx在几十万并发连接下高效利用服务器资源的基本原理。 epoll在处理用户请求时不同于select或者poll的模式(采用轮询来处理的,...原创 2020-01-16 22:18:55 · 4555 阅读 · 0 评论 -
Nginx源码初探之事件模块 - 连接基数数据结构
Nginx事件处理模型是Nginx事件处理的核心,充分体现了最简业务原则和分段处理的架构理念。作为Web服务器,Nignx每一个用户请求至少对于一个TCP连接,一个TCP连接至少需要一个读事件和一个写事件(分段原则的体现,即使很简单很明确的需求也会分段处理。)。在这里我们必须理解Nginx事件的定义和连接的定义。事件定义的基本数据结构是ngx_event_t,连接定义的基本数据结构...原创 2020-01-16 17:01:18 · 4263 阅读 · 0 评论 -
Nginx源码初探之事件模块-用户请求建立连接
事件处理框架介绍 Nginx基于事件驱动架构的Web服务器,负责这个功能的主要模块就是事件处理模块。事件处理模块主要解决如何收集、管理、分发事件(主要是网络事件和定时器事件)。由于网络事件与网卡中断处理程序,内核提供的系统调用密切相关,所以网络事件的驱动既取决与不同的操作系统,也取决于操作系统不同的操作系统内核版本。Nginx定义了一些列的事件驱动模块:ngx_devpoll_...原创 2020-01-14 17:33:26 · 2526 阅读 · 0 评论 -
Nginx源码初探之基础架构-启动流程
Nginx基础框架介绍 Nginx采用事件驱动架构,多阶段请求异步处理。,简单的说就是事件源产生事件,事件收集器收集事件,分发器分发事件,处理器注册并消费事件。对比传统WEb服务器而言,传统WEB服务器通过进程或许线程处理事件,请求事件从产生到结束处理进程独占内存、CPU、网络等资源。而Nginx服务器,只有事件收集器、分发器可以占有资源,事件会分发给消费模块使用当前进程处理。传统w...原创 2020-01-14 15:32:43 · 6417 阅读 · 0 评论 -
Nginx源码初探之基础架构-web服务器的约束
软件设计一方面是功能设计,一方面是架构设计。功能设计主要就是满足软件需要提供的功能,支撑的服务。比如Nginx是一款Web服务器,那么他的功能就必须满足Web传输协议的各种约束,实现Web服务具有的各种功能。架构设计主要是解决如何提高更高效的服务,如何更低成本的维护,如何让服务更稳定健硕这些问题。他有一系列的规则和约束,本文旨在梳理Nginx服务器在架构设计方面(基本上也是软件设计...原创 2020-01-14 10:28:40 · 4077 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 基数树数据结构
基数树介绍 基数树也叫做压缩前缀树,是一种多叉搜索树,对比其他结构跟节省空间。基数树常见于IP路由检索,文本文档的的倒排索引等场景中。同时基数树也是按照字典顺序来组织叶节点的,这种特点使之适合持久化改造,加上他的多道特点,灵活性较强,适合作为区块链的基础数据结构,构建持久性区块时较好的映射各类数据集合。Nginx基数树的实现 Nginx中基数树的实现是一种二叉查...原创 2020-01-14 09:42:42 · 4232 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 链接数据结构
ngx_event_t事件和ngx_connection_t连接是处理TCP连接的基础数据结构。Nginx处理请求连接有三个主要的数据结构,ngx_cycle_t全局变量结构体,ngx_connection_t网络链接结构体,ngx_listening_t网络监听结构体。这三个结构体是nginx事件模块的核心结构体。ngx_connection_t存储网络链接和读写事件,ngx_li...原创 2020-01-13 15:32:04 · 4230 阅读 · 0 评论 -
Nginx源码初探之数据结构 - cycle数据结构
ngx_cycle_t介绍 ngx_cycle_t是Nginx的私有结构体,换句话说是Nginx的业务结构体。Nginx核心的框架代码都是围绕ngx_cycle_t展开的。无论是master管理进程、worker工作进程还是cache manager(loader)进程,都拥有一个唯一的ngx_cycle_t结构体。服务在初始化时就是以ngx_cycle_t对象为中心来提供服务,...原创 2020-01-13 14:45:00 · 2705 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 哈希数据结构
Nginx哈希数据结构介绍 Nginx中的hash数据结构主要用来存储配置数据,比如url=ip的映射关系。Nginx中只提供了初始化的方法,也就是Hash结构一旦初始化后是不允许修改的,这样一方面提高了内存的利用率,另一方面提高了查询效率。Nginx实现了两类Hash结构,一类是ngx_hash_wildcard_t通过指针指向具体数据,一类是ngx_hash_t。1...原创 2020-01-13 11:14:34 · 4117 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 队列数据结构
队列介绍 队列是有序集合,先进先出FIFO,队列的概念很好理解,队列的应用也非常广泛如:循环队列、阻塞队列、并发队列、优先级队列等。Nginx数据结构是循环队列,prev前置节点环和next后置节点环。 Nginx链表还是非常有特色的,它是一种轻量级链表,这种链表不包含数据内容,只包含前后节点指针。在使用的时候需要作为带有节点变量的结构体(宿主)的成员变量存在(寄宿...原创 2020-01-13 09:27:08 · 4115 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 红黑树数据结构
Nginx红黑树介绍 红黑树是Nginx里的高级数据结构。什么是红黑树呢?红黑树是一种平衡二叉树,简单的说就是它是一棵空树,或者左右子树高差绝对值不超过1,且左右子树都是平衡二叉树。时间复杂度O(log n)。除此之外还有如下特性(1)节点都有颜色,要么黑色,要么红色。(2)根结点是黑色的,叶子结点是黑色的。(3)每条从树到叶子的路上没有二个连续的红色。即红色的子树一定是黑...原创 2020-01-12 19:58:01 · 4176 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 链表数据结构
ngx_list_t 介绍 ngx_list_t是Nginx中使用的较为频繁的数据结构,数据内容基于指针获取,内存分配基于内存池进行。由于数据内容存放的是指针,所以理论上ngx_list_t可以用来构建多维链表甚至是网络结构,只是Nginx原始代码封装的函数中并不涉及这些数据结构的操作(实际上也不需要)。1.数据结构 Nginx链表的数据结构包含两个部分ngx...原创 2020-01-12 13:29:54 · 1538 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 数组数据结构
nginx内部使用的数组结构是ngx_array_t,ngx_array_t是一个顺序容器,以数组的形式存储元素,并能够在容量达到最大值时动态扩容。Nginx数组属于基础数据结构部分,只要具备一定的开发经验,可以参考自己所熟悉的其他框架的数组。值得重复提出的一点是Nginx数组的内存事宜遵循,Nginx内存使用的类别化,层级化的原则,内存的使用在内存池中进行。1.数据结构t...原创 2020-01-12 12:50:46 · 2529 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 模块数据结构
Nginx架构最大的特点就是模块化结构体系,ngx_module_s定义了一个模块应该包含的基础属性,包括名称,版本,指令,类型,进程管理,线程管理等内容。1.数据结构struct ngx_module_s { /*前七个属性对应于宏NGX_MODULE_V1*/ ngx_uint_t ctx_index;/*模块标识,每个模块的唯一...原创 2020-01-10 15:48:17 · 854 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 内存池结构
为了避免出现内存碎片,避免反复向操作系统申请内存,Nginx设计了简单的内存池。nginx内存池根据用户请求逐级分配,逐级释放。整体上内存池分为三个等级进程级(master/worker),connection级(用户连接),request级(请求处理)三个不同的层级。启动启动时创建main级别内存池,然后master/work进程创建内存池,当有连接进来的时候,创建一个conne...原创 2020-01-10 10:36:28 · 2535 阅读 · 0 评论 -
Nginx源码初探之数据结构 - 缓冲区结构
Nginx通过内存池使用内存,需要从内存池中申请资源在缓存使用上。可以对零散的缓冲区碎片进行了统一的管理和再分配,从而提高了缓冲区的利用率。其中最底层的数据结构,就是内存块数据结构和内存块链表数据结构。1.数据结构 ngx_buf_t是Nginx系统中系统分配内存的基本单位。ngx_buf_t分为三部分,内存块部分,文件部分,元数据,并分别提供了控制机制。也就...原创 2020-01-10 08:49:28 · 515 阅读 · 0 评论 -
Nginx架构之模块化结构体系
备注:随着版本的不同Nginx的版本也会有所不同,比如STREAM模块的出现。具体情况可以参考《Nginx源码初探 -之数据结构 - 模块数据结构》当理解了Nginx模块的设计之后,再看Nginx的结构体系就会有种豁然明朗的感觉。 相比传统Web服务器,Nginx表现的更具有专业性。在架构上Nginx受到各种操作系统中高级事件机制处理模式的启发,Nginx实现了整体基于m...原创 2020-01-09 10:03:17 · 2913 阅读 · 0 评论 -
Nginx重要概念理解-正向代理和反向代理
Nginx是有俄罗斯人伊戈尔·赛索耶夫(Igor Sysoev)为俄罗斯访问量第二的rambler.ru站点开发的轻量级Web服务器,同时也是一个非常高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。本文主要从正向代...原创 2020-01-08 14:21:32 · 2872 阅读 · 0 评论