1 nginx的基数树简介
基数树是一种二叉查找树,它具备二叉查找树的所有优点:检索、插入、删除节点速度快,支持范围查找,支持遍历等。在nginx中仅geo模块使用了基数树。nginx的基数树使用ngx_radix_tree_t这个结构体表示的。ngx_radix_tree_t要求存储的每个节点都必须以32位整形作为区别任意两个节点的唯一标识。ngx_radix_tree_t基数树会负责分配每个...
分类:
其他好文 时间:
2014-10-01 18:19:41
阅读次数:
235
ngx_lua出来很长时间了,但一直没有关注过,最近有一个I/O密集型的项目,用PHP性能严重不足,但是通过C开发扩展成本很大,对需求也不能及时响应,结果尝试了一下lua,结果非常喜人,他的同步非阻塞I/O,协同程序等等,让他的性能无与伦比!在项目的开发中需要用到consistenthas..
分类:
其他好文 时间:
2014-09-30 13:56:50
阅读次数:
294
1 ngx_array_t结构
ngx_array_t是nginx内部使用的数组结构。nginx的数组结构在存储上与大家认知的C语言内置的数组有相似性,比如实际上存储数据的区域也是一大块连续的内存。但是数组除了存储数据的内存以外还包含一些元信息来描述相关的一些信息,并且可以动态增长。下面
我们从数组的定义上来详细的了解一下。ngx_array_t的定义位于src/core/ngx_array....
分类:
其他好文 时间:
2014-09-29 01:45:27
阅读次数:
368
1 ngx_queue_t简介
ngx_queue_t是nginx提供的一个轻量级的双向链表容器,它不负责存储数据,既不提供数据的内存分配,它只有两个指针负责把数据链入链表,它跟stl提供的queue不同,stl提供的queue帮助用户存储数据,用户只需要相容器里添加数据即可,而ngx_queue_t,用户必须自己提供存储数据的内存,并且必须定义一种数据结构把ngx_queue_t包含在其中...
分类:
其他好文 时间:
2014-09-29 00:05:46
阅读次数:
159
题注最近我在学习nginx的lua插件,发现结合nginx的异步io和lua的流程控制能力,还是有很丰富的想象空间的:几乎所有常见的http请求的处理逻辑都能搞定,诸如查查数据库,访问一下memcache,读写一下本地文件等,都不在话下。恰好我正在研究一个第三方http服务的调用api,就产生了将其...
分类:
其他好文 时间:
2014-09-28 12:56:42
阅读次数:
1210
1 nginx过滤模块简介
过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理。它的处理时间在获取回复内容之后,
向用户发送响应之前。它的处理过程分为两个阶段,过滤HTTP回复的头部和主体,在这两个阶段可以分别对头部和主体
进行修改。
2 过滤模块执行顺序
2.1 ngx_http_output_(head, body)_filter_pt
先看一下ng...
分类:
其他好文 时间:
2014-09-26 23:56:18
阅读次数:
353
一、介绍ngx-http-status-code-counter是一个用来记录nginx响应状态码的统计信息,作者将这个模块与munin结合来分析网站的http状态,我们也可以将这个与nagios、zabbix或者其他监控系统想结合,有这个模块运维可以不再使用脚本去分析日志了。二、安装nginx的安装方式不再多说,..
分类:
其他好文 时间:
2014-09-26 00:04:18
阅读次数:
405
这几天在看nginx,发现凡是有内存申请的地方都有pool这个东东出现,仔细看看,原来pool的类型是ngx_pool_t,是nginx用来做内存管理的,于是就决定看看他的实现。
1 nginx内存池相关的结构体
ngx_pool_t定义在core/ngx_palloc.h ngx_palloc.c中,下面是几个主要的结构体
ngx_pool_data_t
typede...
分类:
其他好文 时间:
2014-09-24 21:07:58
阅读次数:
332
先把代码贴在这里,有时间整理if(r->headers_in.x_real_ip != NULL) { ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "%V", &r->headers_in.x_real_ip->value); ...
分类:
其他好文 时间:
2014-09-23 15:36:14
阅读次数:
228
函数定义 ngx_int_t ngx_output_chain(ngx_output_chain_ctx_t *ctx, ngx_chain_t *in) 函数目的是发送 in 中的数据,ctx 用来保存发送的上下文,因为发送通常情况下,不能一次完成。nginx 因为使用了 ET 模式,在...
分类:
其他好文 时间:
2014-09-22 16:05:53
阅读次数:
238