地址
https://github.com/langsim/nginx-1.6.2-comment
简介
希望完成一份高可读性的nginx源码注释。
不会注释的内容
- spdy相关代码,因为spdy已经被http2取代.
- 线程相关代码,因为至少在1.6.2版本nginx的线程还处在实验性阶段.
- linux之外其他平台的代码.
- epoll之外其他事件模型的代码
- gcc之外其他编译器的代码.
- mail相关的代码.
完成程度
- core目录 60%
- event目录 20%
- http目录 10%
- os目录 80%
函数链表
- http filter模块之间,ngx_http_top_header_filter和ngx_http_top_body_filter会形成两个函数链表, 链表中函数的调用顺序会和对应模块在ngx_modules数组的顺序相反。
- http请求处理的11个阶段中很多阶段都可以多个回调函数,同一个阶段的回调函数之间调用顺序和对应模块在ngx_modules数组里的顺序相同。
日志
nginx默认有两个log文件:
- access.log: 每一个http请求会在里面产生一行记录。
- error.log: nginx运行时的一些常规,错误或调试日志。
进程模型
nginx启动后可能出现四种进程状态:
- 单进程前台运行
- 单进程守护进程模式
- 一个master进程,一个(或多个)worker进程,一个(或0个)cachemanager进程和一个(或0个)cacheloader进程共同在前台运行
- 一个master进程,一个(或多个)worker进程,一个(或0个)cachemanager进程和一个(或0个)cacheloader进程在守护进程状态下运行。
- master进程在启动是用于启动其他进程,启动完成后用于管理其他进程。
- woker进程,用于实际处理链接请求。
- cachemanager进程用于按要求清理cache文件。
- cacheloader进程在启动时会将cache目录里符合条件的cache文件在内存里建立索引,不符合要求的cache文件清除,然后退出。
- 启动后给正在运行的nginx的主进程发信号,然后退出。
进程运行状态的切换
- 重载配置文件(reload)
- 热升级可执行文件
编译
nginx的编译与linux平台常规开源软件的编译方式相同,都是运行./configure && make && make install, 在./configure后可加入自己的自定义选项。
nginx使用信号
- TERM, INT 快速关闭
- QUIT 从容关闭
- HUP 平滑重启,重新加载配置文件
- USR1 重新打开日志文件,在切割日志时用途较大
- USR2 平滑升级可执行程序
- WINCH 从容关闭工作进程
nginx内存池
nginx有两个内存池
- 在共享内存上分配内存用的内存池
- 在普通内存上申请内存用的内存池,目的是高效的利用内存
nginx使用到的计算hash算法
- crc32
- crc16
- sha1
- murmurhash
- md5
nignx进程通信与同步
- 共享内存的使用
- 信号
- unix套接字
').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i ').text(i));
};
$numbering.fadeIn(1700);
});
});
以上就介绍了(个人开源)nginx源码注释,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。