该函数的返回值- ngx_command_t结构
char*(*set)(ngx_conf_t*cf,ngx_command_t*cmd,void*conf);先看该函数的返回值,处理成功时,返回NGX_OK,否则返回NGX_CONF_ERROR或者是一个自定义的错误信息的字符串。再看一下这个函数被调用的时候,传入的三个参数。cf:该参数里面保存从
name:配置指令的名称
name:配置指令的名称。type:该配置的类型,其实更准确一点说,是该配置指令属性的集合。nginx提供了很多预定义的属性值(一些宏定义),通过逻辑或运算符可组合在一起,形成对这个配置指令的详细的说明。下面列出可在这里使用的预定义属性值及说明。NGX_CONF_NOARGS:配置指令不接受任何参数
handler模块
handler模块(100%)handler模块简介相信大家在看了前一章的模块概述以后,都对nginx的模块有了一个基本的认识。基本上作为第三方开发者最可能开发的就是三种类型的模块,即handler,filter和load-balancer。Handler模块就是接受来自客户端的请求并产生输出的模块
nginx的请求处理
nginx的请求处理nginx使用一个多进程模型来对外提供服务,其中一个master进程,多个worker进程。master进程负责管理nginx本身和其他worker进程。所有实际上的业务处理逻辑都在worker进程。worker进程中有一个函数,执行无限循环,不断处理收到的来自客户端的请求,并进
初探nginx-五种配置
在这个配置中,上面提到个五种配置指令上下文都存在。存在于main上下文中的配置指令如下:userworker_processeserror_logeventshttpmail存在于http上下文中的指令如下:server存在于mail上下文中的指令如下:serverauth_httpimap_cap
初探nginx- nginx的配置系统
nginx的配置系统(100%)nginx的配置系统由一个主配置文件和其他一些辅助的配置文件构成。这些配置文件均是纯文本文件,全部位于nginx安装目录下的conf目录下。配置文件中以#开始的行,或者是前面有若干空格或者TAB,然后再跟#的行,都被认为是注释,也就是只对编辑查看文件的用户有意义,程序
初探nginx-给定的list的尾部追加一个元素
void*ngx_list_push(ngx_list_t*list);该函数在给定的list的尾部追加一个元素,并返回指向新元素存放空间的指针。如果追加失败,则返回NULL。staticngx_inlinengx_int_tngx_list_init(ngx_list_t*list,ngx_poo
初探nginx- 两个宏使用类似函数
这两个宏使用类似函数,也是不说自明的。对于创建temporary字段为1的buf(就是其内容可以被后续的filter模块进行修改),可以直接使用函数ngx_create_temp_buf进行创建。ngx_buf_t*ngx_create_temp_buf(ngx_pool_t*pool,size_t
初探nginx-ngx_chain_t(100%)
ngx_chain_t(100%)nginx的filter模块在处理从别的filter模块或者是handler模块传递过来的数据(实际上就是需要发送给客户端的httpresponse)。这个传递过来的数据是以一个链表的形式(ngx_chain_t)。而且数据可能被分多次传递过来。也就是多次调用fil
初探nginx-- ngx_hash_keys_array
ngx_hash_keys_arrays_t(100%)大家看到在构建一个ngx_hash_wildcard_t的时候,需要对通配符的哪些key进行预处理。这个处理起来比较麻烦。而当有一组key,这些里面既有无通配符的key,也有包含通配符的key的时候。我们就需要构建三个hash表,一个包含普通的
初探nginx-- ngx_hash_wildcard_t
ngx_hash_wildcard_t(100%)nginx为了处理带有通配符的域名的匹配问题,实现了ngx_hash_wildcard_t这样的hash表。他可以支持两种类型的带有通配符的域名。一种是通配符在前的,例如:“*.abc.com”,也可以省略掉星号,直接写成”.abc.com”。这样的
初探nginx-销毁该数组对象
voidngx_array_destroy(ngx_array_t*a);销毁该数组对象,并释放其分配的内存回内存池。void*ngx_array_push(ngx_array_t*a);在数组a上新追加一个元素,并返回指向新元素的指针。需要把返回的指针使用类型转换,转换为具体的类型,然后再给新元素
初探nginx-大块内存链
对于被置于大块内存链,也就是被large字段管理的一列内存中的某块进行释放。该函数的实现是顺序遍历large管理的大块内存链表。所以效率比较低下。如果在这个链表中找到了这块内存,则释放,并返回NGX_OK。否则返回NGX_DECLINED。由于这个操作效率比较低下,除非必要,也就是说这块内存非常大,
初探nginx-ngx_pool_t(100%)
ngx_pool_t(100%)ngx_pool_t是一个非常重要的数据结构,在很多重要的场合都有使用,很多重要的数据结构也都在使用它。那么它究竟是一个什么东西呢?简单的说,它提供了一种机制,帮助管理一系列的资源(如内存,文件等),使得对这些资源的使用和释放统一进行,免除了使用过程中考虑到对各种各样
初探nginx-将src的前n个字符转换成小写存放在dst字符串当中
将src的前n个字符转换成小写存放在dst字符串当中,调用者需要保证dst指向的空间大于等于n,且指向的空间必须可写。操作不会对原字符串产生变动。如要更改原字符串,可以:ngx_strlow(str->data,str->data,str->len);ngx_strncmp(s1,
初探nginx-ngx_str_t(100%)
ngx_str_t(100%)在nginx源码目录的src/core下面的ngx_string.h|c里面,包含了字符串的封装以及字符串相关操作的api。nginx提供了一个带长度的字符串结构ngx_str_t,它的原型如下:typedefstruct{size_tlen;u_char*data;}
初探nginx- pipe
pipe在http1.1中,引入了一种新的特性,即pipeline。那么什么是pipeline呢?pipeline其实就是流水线作业,它可以看作为keepalive的一种升华,因为pipeline也是基于长连接的,目的就是利用一个连接做多次请求。如果客户端要提交多个请求,对于keepalive来说,
初探nginx-处理流程图
处理流程图:以上这些,就是nginx中一个http请求的生命周期了。我们再看看与请求相关的一些概念吧。keepalive当然,在nginx中,对于http1.0与http1.1也是支持长连接的。什么是长连接呢?我们知道,http请求是基于TCP协议之上的,那么,当客户端在发起请求前,需要先与服务端建
初探nginx-request
ngx_accept_disabled=ngx_cycle->connection_n/8-ngx_cycle->free_connection_n;if(ngx_accept_disabled>0){ngx_accept_disabled--;}else{if(ngx_trylo
初探nginx - connection
connection在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件。利用nginx封装的connection,我们可以很方便的使用nginx来处理与连接相关的事情,比如,建立连接,发送与接受数据等。而nginx中的http请求的处理就是建立在co