(个人开源)nginx源码注释
2016-03-08 23:09
447 查看
地址
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算法
crc32crc16
sha1
murmurhash
md5
nignx进程通信与同步
共享内存的使用信号
unix套接字
相关文章推荐
- Nginx 的线程池与性能剖析
- 构建高效安全的Nginx Web服务器
- 构建高效安全的Nginx Web服务器
- 让vim支持nginx语法高亮
- Nginx与用户和服务器之间的传输模式
- python Django + uwsgi + nginx 在阿里云Ubuntu环境下的部署
- 解决thinkphp在不支持pathinfo的nginx上的问题
- Web服务器- apache与nginx分析
- nginx 基本运维
- Nginx:作为cdn缓存时,follow 302
- 详解Nginx配置nginx.conf
- 深入浅出Nginx之七【重要知识补充】
- 深入浅出Nginx之六【代理缓存与负载均衡】
- 深入浅出Nginx之四【日志切割与环境变量】
- 深入浅出Nginx之三【虚拟目录与虚拟主机】
- 深入浅出Nginx之二【基本配置】
- 深入浅出Nginx之一【简介与环境搭建】
- NGINX原理剖析
- How To Set Up Nginx Server Blocks (Virtual Hosts) on Ubuntu 14.04 LTS
- 源码安装Nginx和PHP