Nginx
shenmingik
于现在,对话未来
展开
-
Nginx工作机制剖析
Nginx以下简介摘自百度百科:Nginx是一款轻量级的HTTP服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等初探Nginx架构Nginx的启动Nginx在启动后,在Unix系统中会以daemon(守护进程)的方式在后台运行,后台进程包含一个master进程和多个worker进程。原创 2020-10-13 21:19:15 · 384 阅读 · 2 评论 -
Nginx基础概念及基本方法
连接方法connection在Nginx中,connection就是对tcp连接的封装,包括连接的socket、读事件、些时间。结合一个tcp连接的生命周期,我们看看Nginx是如何处理一个链接的。Nginx刚启动时,解析配置文件,得到需要监听的IP地址和端口在master进程初始化socketfork()多个工作进程,同时工作进程会竞争accept新连接完成这三步,客户端就可以像Nginx发起连接了。当进行TCP三次握手之后,Nginx的某一个worker进程会accept成功。然后就根据原创 2020-10-16 15:26:42 · 306 阅读 · 0 评论 -
Nginx请求相关概念——keepalive、pipe、lingering_close
keepalive作为一个web服务器架构,Nginx当然也支持长连接。http请求是基于TCP协议的。当客户端发起请求前,需要先与服务端建立TCP连接,而每一次TCP连接是需要三次握手来确定的。如果客户端与服务端之间通讯质量变差,那么这三次握手所带来的时间消耗就不可忽略了。当连接断开后,也会有四次交互。当然,这并不会影响用户体验。...原创 2020-10-27 21:48:08 · 387 阅读 · 0 评论 -
Nginx数据结构(一)—— ngx_str_t、ngx_pool_t
ngx_str_tngx_str_t是一个带长度的字符串结构:typedef struct{ size_t len; u_char *date;}date指向字符串的第一个字符,字符串的结束用长度表示,而不是’\0’。Nginx之所以这样做,首先就是为了减少计算字符串长度的次数。其次,就是可以靠这个机制去重复引用一个字符串,而不是去拷贝一份。所以,在Nginx中,修改一个字符串必须小心!!因为Nginx采用了与glibc完全不同的设计模式,所以在调用一些函数就不能直接传入str->原创 2020-10-30 19:31:27 · 346 阅读 · 0 评论 -
Nginx数据结构(二)——ngx_array_t、ngx_hash_t
ngx_array_tngx_array_t是Nginx内部使用的数组结构。typedef struct ngx_array_s ngx_array_t;struct ngx_array_s{ void *elts; //实际的数据存储区域 ngx_uint_t nelts; //数据实际个数 size_t size; //数组单个元素大小 ngx_uint_t nalloc; //数组的最大容量 ngx_pool_t *pool; //用来分配内存的内存池};原创 2020-10-30 21:15:38 · 219 阅读 · 0 评论 -
Nginx基本数据结构(三)——ngx_chain_t、ngx_buf_t
ngx_chain_tNginx的filter模块用来处理从别的filter和handler模块传递过来的数据。这个传递的过程是以一个链表(ngx_chain_t)的形式。而且数据可能会被多次传递。struct ngx_chain_s{ ngx_buf_t *buf; ngx_chain_t *next;}相关操作APIngx_chain_t* ngx_alloc_chain_link(ngx_pool_t* pool);//创建一个ngx_chain_t对象,并返回指向对象的指针,原创 2020-10-30 22:55:15 · 542 阅读 · 0 评论 -
Nginx基本数据结构(三)——ngx_list_t
ngx_list_tNginx的list数据结构与我们常见的链表实现的数据结构还是有一些不同的:它的节点不像我们常见的list的节点,只能存放一个元素,ngx_list_t的节点实际上是一个固定大小的数组。在初始化的时候,我们需要设定元素需要占用的空间大小,每个节点数组的容量大小。在添加元素到这个list里面的时候,会在最尾部的节点里的数组上添加元素,如果这个节点的数组存满了,就再增加一个新的节点到这个list里面去。typedef struct{ ngx_list_part_t *las原创 2020-11-01 13:28:18 · 214 阅读 · 0 评论 -
Nginx的模块化体系结构
模块概述Nginx的内部结构是核心部分和一系列的功能模块所组成。我们一般将Nginx core称为Nginx核心,其提供了web服务器的基础功能,同时提供了web服务反向代理,email服务反向代理,Nginx核心实现了底层的通讯协议,为其他模块和Nginx进程构建了基本的运行时环境。Nginx将各功能模块组成成一条链,请求依次经过这条链上的部分或者全部模块进行处理。模块的分类event module:搭建了独立于操作系统的事件处理机制框架,及提供了各具体事件的处理。包括ngx_event_原创 2020-11-02 12:32:52 · 344 阅读 · 0 评论