nginx
lengzijian
互联网的魅力令我着了迷
展开
-
nginx 源码学习笔记(一)——初识nginx helloworld模块
最近看完一本书,而且还是跟我一个学校的人写的关于nginx的内容,个人觉得内容可以更充实点,包括整本书的后半本没有太大的价值,但是总体来说还是不错的哈哈!(是不有点自恋),不费话了,今天记录下我刚刚编写的nginx hello_world模块内容,网上也没有源代码,就完全手敲了,累呀! 1.nginx模块首先nginx和apache最大的不同就是nginx的模块不能够动态添加,需要在编原创 2012-03-13 17:45:23 · 9454 阅读 · 7 评论 -
nginx模块学习——nginx_http_push_module模块深入讲解和聊天室实现
关于: nginx_http_push_module模块致力成为一个成熟的http推送和comet服务,它能够处理好全部链接,并且仅通过http请求,可以完成广播消息到所有客户端,这让你写异步web应用程序时得心应手,并且在代码中完全不必理会延时请求。 本文为翻译文章,有部分原创转载请注明地址:http://blog.csdn.net/lengzijian/article/deta原创 2012-06-06 14:35:14 · 12650 阅读 · 6 评论 -
nginx 源码学习笔记(十六)—— ngx_start_worker_processes子进程创建
上一节,我们主要讲了多进程时,主进程如何利用信号量控制子进程的,这一节我们主要讲解下子进程的启动,和执行的操作。 上一节讲过,真正创建worker子进程的函数是ngx_start_worker_processes,这个函数本身很简单:src/os/unix/ngx_process_cycle.cstatic voidngx_start_worker_processes(ngx_c原创 2012-05-22 14:38:08 · 7067 阅读 · 0 评论 -
nginx 源码学习笔记(十四)—— 全局变量ngx_cycle
再打算正式开始研究core模块式,发现有一个很重要的变量ngx_cycle_t,一直伴随,如果不懂ngx_cycle可能读起代码来回非常困难,这里就来详细学习一下吧。本文大部分灵感来自于。http://blog.csdn.net/livelylittlefish/article/details/7247080 和http://blog.sina.com.cn/s/blog_677be95b0100原创 2012-05-21 15:16:48 · 7066 阅读 · 1 评论 -
nginx 源码学习笔记(十五)—— ngx_master_process_cycle 多进程(一)
了解core模块之前还应改学习ngx_start_worker_processes函数,今天我就来详细学一下这个方法,主要内容来自于http://blog.sina.com.cn/s/blog_677be95b0100iivk.html。 nginx的进程启动过程是在ngx_master_process_cycle(src/os/unix/ngx_process_cycle.c)中完成的(原创 2012-05-21 18:03:17 · 7155 阅读 · 1 评论 -
nginx 源码学习笔记(十七)—— ngx_worker_process_cycle子进程执行
上一节主要讲解主进程如何开启子进程,并且讲解了主进程做的一些操作,这一节主要学习子进程处理函数ngx_worker_process_cyclesrc/os/unix/ngx_process_cycle.cstatic voidngx_worker_process_cycle(ngx_cycle_t *cycle, void *data){ ngx_uint_t原创 2012-05-22 16:08:24 · 6538 阅读 · 1 评论 -
nginx 源码学习笔记(十八)—— ngx_add_inherited_sockets 继承的sockets
之前几节有讲过多进程的创建过程和子进程所处理的事情,今天要讲一下nginx里面main函数的另一个主要的操作ngx_add_inherited_sockets。ngx_add_inherited_sockets:服务器监听套接字的封装。本文的主要灵感来自:http://blog.csdn.net/livelylittlefish/article/details/7277607,感谢作者分享原创 2012-05-23 14:31:02 · 6534 阅读 · 1 评论 -
nginx 源码学习笔记(十九)—— nginx启动过程函数调用图
学了很久的nginx启动流程,今天决定复习下以前所学的知识,画一个函数调用图,一边之后快速阅读代码。希望对大家有用,由于我的博文被大量网站抓取而且不标注来源,所以决定在图上加上水印,希望各位同学不要喷我。 该文章来自:http://blog.csdn.net/lengzijian/article/details/7597852 另外:因为不知道大家看的效果怎么样如果需要原原创 2012-05-24 12:13:10 · 6541 阅读 · 122 评论 -
nginx 源码学习笔记(二十)—— event 模块(一) ——初始化
读完之前的学习笔记,相信已经对nginx的启动流程有了一定的认识,从这一节起我们想深入各个模块,学习各个模块的内的主要操作。本文来自于:http://blog.csdn.net/lengzijian/article/details/7598996今天我们就来学习下event模块,在之前的启动里多次提到了调用各个模块的钩子函数,我们先来回忆一下关于event模块钩子函数的执行,也是e原创 2012-05-25 12:03:15 · 10749 阅读 · 2 评论 -
nginx 源码学习笔记(二十一)—— event 模块(二) ——事件驱动核心ngx_process_events_and_timers
首先继续回忆下,之前子线程执行操作里面有一个未涉及的内容ngx_process_events_and_timers,今天我们就来研究下这个函数。本篇文章来自于:http://blog.csdn.net/lengzijian/article/details/7601730先来看一下第十九节的部分截图:今天主要讲解的就是事件驱动函数,图中的红色部分:src/event/ng原创 2012-05-25 16:25:53 · 14460 阅读 · 10 评论 -
nginx与apache详细性能对比
之前一直研究nginx的源代码,最近有时间也做了下nginx与apache的性能对比,希望能够够对大家有所帮助! 转载请注明:http://blog.csdn.net/lengzijian/article/details/7699444 nginx动态文件处理能力差? 这是我最困惑的地方,在google了nginx之后发现它的评价并没有想象中那么差劲,并且很多公司已经开原创 2012-06-28 15:14:17 · 15344 阅读 · 3 评论 -
nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams模块测试 (二)
在这里详细讲解healthcheck_nginx_upstreams模块中存在的bug,对于healthcheck_nginx_upstreams模块的安装和使用请阅读上一篇blog进行学习。测试环境,通过nginx做反向代理,请求转发给2和3:1.192.168.0.235(nginx)2.192.168.30.150(apache)3.192.168.30.200(apache原创 2013-07-23 17:53:17 · 8384 阅读 · 1 评论 -
nginx 源码学习笔记(十二)——基本容器——ngx_buf
ngx_buf.{c|h}分为两种类型,一种是file,一种是memory。因此这里会有文件的一些操作域。typedef void * ngx_buf_tag_t;typedef struct ngx_buf_s ngx_buf_t;struct ngx_buf_s { u_char *pos; //已经执行的原创 2012-03-15 16:51:20 · 3513 阅读 · 0 评论 -
nginx 源码学习笔记(十一)——基本容器——ngx_list
ngx_list.{c|h}结构非常简单,如果你看过之前的array介绍,这一节可以一带而过:typedef struct ngx_list_part_s ngx_list_part_t;struct ngx_list_part_s { void *elts; //数据区域指针 ngx_uint_t nelts;原创 2012-03-15 16:47:00 · 2922 阅读 · 0 评论 -
nginx 源码学习笔记(八)——基本容器——array数组
对应文件为core/ngx_array.{c|h}ngx_array是nginx内部封装的,使用ngx_pool_t对内存池进行分配的数组容器,其中的数据是在一整片内存区中连续存放的。更新数据时只能在尾部压入1个或多个元素。这里单纯的觉得和数组没有差别。 数组的实现结构为:struct ngx_array_s { void *elts; //具体的数据区域原创 2012-03-15 16:34:43 · 4389 阅读 · 0 评论 -
nginx 源码学习笔记(二)——nginx精粹-模块
看了一点nginx的源码发现,nginx的模块思想确实吸引了我,也不得不佩服俄罗斯人的想问题方式,要分析nginx源码,首先要搞懂的就是nginx的模块思想以及相关的数据结构。还记得我们上一次写的helloworld模块么?里面涉及最重要的数据就是ngx_module_t指针数组,这个指针数组包含了当前编译版本支持的所有模块,这个指针数组定义实在自动脚本生成的objs/ngx_modules.原创 2012-03-14 10:49:17 · 5116 阅读 · 12 评论 -
nginx 源码学习笔记(三)——nginx精粹-模块
下面开始真正"nginx之旅",屏住呼吸吧!首先找好入手点,对于nginx的入手点就是ngx_module_t结构,他的声明在src/core/ngx_conf_file.h中(我的版本nginx-1.0.13)#define NGX_MODULE_V1 0, 0, 0, 0, 0, 0, 1#define NGX_MODULE_V1_PADDING 0, 0,原创 2012-03-14 17:48:04 · 4194 阅读 · 0 评论 -
nginx 源码学习笔记(七)——内存分配相关源码分析
内存分配相关1. 系统功能封装内存相关的操作主要在os/unix/ngx_alloc.{h,c} 和 core/ngx_palloc.{h,c}中。其中os/unix/ngx_alloc.{h,c}封装了最基本的内存分配函数,是对c原有的malloc/free/memalign等函数的封装,对应函数为:a.ngx_alloc:对malloc进行了简单的封装;voi原创 2012-03-15 14:06:54 · 4380 阅读 · 5 评论 -
nginx 源码学习笔记(四)——nginx精粹-模块
接下来,继续理解helloworld模块中的指令。helloworld中的代码/* Commands */static ngx_command_t ngx_http_hello_world_commands[] = { { ngx_string("hello_world"), NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS, ngx_h原创 2012-03-15 10:54:00 · 6545 阅读 · 0 评论 -
nginx 源码学习笔记(五)——nginx精粹-模块
我们之前说过模块的上下文分别对应四种结构体分别是ngx_core_module_t、ngx_event_module_t、ngx_http_module_t、ngx_mail_module_t分别对应四类模块src/core/ngx_conf_file.htypedef struct { ngx_str_t name; void原创 2012-03-15 11:20:31 · 3156 阅读 · 0 评论 -
nginx 源码学习笔记(十)——基本容器——ngx_hash
ngx_hash.{c|h}实现了nginx里面比较重要的一个hash结构,这个在模块配置解析里经常被用到。该hash结构是只读的,仅在初始创建时可以给出保存在其中的key-val对儿,然后就只能进行“增删改查”操作了。先来看一下hash结构的内存布局:typedef struct { ngx_hash_t *hash; /原创 2012-03-15 16:43:19 · 4218 阅读 · 0 评论 -
nginx 源码学习笔记(二十二)—— event 模块(三) ——epoll模块
上一节我们讲到了事件驱动的模块,它把我们引入epoll模块,今天我们主要学习下nginx如何使用epoll完成时间驱动,实现高并发;这里不详细讲解epoll原理,如果有机会再做一次单独的epoll的学习。本文来自于:http://blog.csdn.net/lengzijian回忆一下上一节的内容,在我们讲到ngx_process_events_and_timers时,在源码最后提到了ng原创 2012-05-28 14:15:36 · 5830 阅读 · 1 评论 -
nginx 源码学习笔记(九)——基本容器——queue
src/core/ngx_queue.{c|h}实现了一个队列的操作逻辑,队列的基本结构为一个双向队列基础数据结构为:typedef struct ngx_queue_s ngx_queue_t;struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next;};根据数据结构可以发现,ng原创 2012-03-15 16:39:23 · 2928 阅读 · 0 评论 -
nginx 源码学习笔记(二十三)—— event 模块(四) ——timer红黑树
在二十一节中,提到过调用ngx_eventfind_timer()获取timer,然后传递给epoll模块,做等待时间,今天我们主要讲解下这个方法。本文来自于:http://blog.csdn.net/lengzijiannginx中的timer用红黑树的结构排序。ngx_event_timer_rbtree就是nginx中timer的红黑树。1.下面我们来看一下ngx_eve原创 2012-05-28 16:05:12 · 8163 阅读 · 0 评论 -
nginx 源码学习笔记(六)——nginx基本数据结构
简单的数据类型在core/ngx_confing.h中定义了基本的数据类型的映射,大部分都映射到c语言自身的数据类型:typedef intptr_t ngx_int_t;typedef uintptr_t ngx_uint_t;typedef intptr_t ngx_flag_t;其中ngx_int_t,ngx_flag_t都映射为i原创 2012-03-15 14:00:49 · 7751 阅读 · 1 评论 -
nginx 源码学习笔记(十三)——文件读写和配置文件读取
对于c语言来说,如果需要支持多个操作系统,就需要封装一下文件的读写。封装文件的读写还有一个益处就是能够把读写异常,读写的内存控制,日志的记录封装起来,以便于其他的模块更好的应用。文件的读写一般会封装成打开文件,关闭打开的文件,读写文件。在nginx的源码中,文件读写主要放在core/ngx_file.c,core/ngx_file.h,src/os/unix/ngx_files.h和src原创 2012-05-16 17:21:52 · 10156 阅读 · 0 评论 -
nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams (一)
该文章来源于互联网,目前找不到原作者,放在这里的目的是记录healthcheck_nginx_upstreams 的安装过程和相关配置,在起初安装成功后不能够正常运行healthcheck_nginx_upstreams,后通过阅读源码和调试,修改一处bug。不过信息如下:*26 no live upstreams while connecting to upstrea原创 2013-07-23 17:13:24 · 17213 阅读 · 1 评论