nginx配置信息的解析流程

2011年9月9日 4 条评论 15,413 次浏览

请关注最新修正合订:http://lenky.info/ebook/ 这一系列的文章还是在09年写的,存在电脑里很久了,现在贴出来。顺序也不记得了,看到那个就发那个吧,最近都会发上来。欢迎转载,但请保留链接:http://lenky.info/,谢谢。 nginx的配置文件格式是nginx作者自己定义的,并没有采用像语法分析生成器LEMON那种经典的LALR(1)来描述配置信息,这样做的好处就是自由,而坏处就是对于nginx的每一项配置信息都必须自己去解析,因此我们很容易看到nginx模块里大量篇幅的配置信息解析代码,比如模块ngx_http_core_module。 当然,nginx配置文件的格式也不是随意的,它有自己的一套规范: nginx配置文件是由多个配置项组成的。每一个配置项都有一个项目名和对应的项目值,项目名又被称为指令(Directive),而项目值可能简单的字符串(以分号结尾),也可能是由简单字符串和多个配置项组合而成配置块的复杂结构(以大括号}结尾),因此我们可以将配置项归纳为两种:简单配置项和复杂配置项。 从上面这条规范可以看到这里包含有递归的思想,因此在后面的配置解析代码里可以看到某些函数被递归调用,其原因也就在这里。 对于复杂配置项来说,其值是由多个简单/复杂配置项组成,因此nginx不做过细的处理,一般就是申请内容空间、切换解析状态,然后递归调用解析函数;真正将用户配置信息转换为nginx内变量的值,还是那些简单配置项所对应的处理函数。 不管是简单配置项还是复杂配置项,它们的项目名和项目值都是由标记(token:这里指一个配置文件字符串内容中被空格、引号、括号,比如'{‘、换行符等分割开来的字符子串。)组成的,配置项目名就是一个token,而配置项目值可以是一个、两个、多个token组成。 比如简单配置项: daemon... [阅读更多]

分类: nginx, 源码分析 标签: ,

这个wordpress还得狠改

2011年9月9日 2 条评论 7,151 次浏览

最近都是10多就睡觉,然后早上7点左右起床,慢悠悠的走路或骑单车到公司,一般都是部门里第一个到公司的银。今天... [阅读更多]

分类: 生活点滴 标签:

nginx的超时处理

2011年9月9日 没有评论 13,128 次浏览

请关注最新修正合订:http://lenky.info/ebook/ 这一系列的文章还是在09年写的,存在电脑里很久了,现在贴出来。顺序也不记得了,看到那个就发那个吧,最近都会发上来。欢迎转载,但请保留链接:http://lenky.info/,谢谢。 nginx对于是否存在有超时事件的处理很巧妙。首先,nginx利用红黑树来组织那些等待处理的并且需要关注其是否超时的事件对象(以下称该红黑树为事件计时红黑树:event_timer_rbtree);其次,nginx提供了两种方案来检测那些等待处理的事件对象是否已经超时,一种为常规的定时检测机制,也就是设置定时器,每过一定的时间就对红黑树管理的所有事件对象进行一次超时检测;另一种是过距离当前最快发生超时的事件对象的时间就进行一次超时检测,这样叙述可能不是很清楚,看完下面的介绍,读者就会理解。 我们已经知道nginx把事件封装在一个名为ngx_event_s的结构体内,而该结构体有几个字段与本节讲的nginx超时处理相关。 unsigned        ... [阅读更多]

分类: nginx, 源码分析 标签: ,

要积累,也要沉淀。

2011年9月8日 6 条评论 10,641 次浏览

安心做点事情,所以特意开通了个人站点,以记录生活工作的点点滴滴。不再使用其它网站提供的博客空间,那些个博客空间总是不太自由,界面不能随心所欲的定制,而相比如此,这个个人申请的空间有ftp、ssh、单独域名,操作起来也比较方面。 藉此希望积累个人技术、沉淀人生经验,另外广泛结交各位志同道合的网友。虽然使用的wordpress,但接下来会修改一下代码,使得其更漂亮也更随心一点。以前做过的相关技术也重新总结发表上来。 ... [阅读更多]

分类: 生活点滴 标签:

世界,你好!

2011年9月8日 1 条评论 8,008 次浏览

欢迎使用 WordPress。这是系统自动生成的演示文章。编辑或者删除它,然后开始您的博客! 这是一个测试页面: /* * Helper function for iterating across a vma list. It ensures that the caller * will visit... [阅读更多]

分类: 生活点滴 标签: