基于nginx-1.1.7
src/
core/ 该目录存放核心基础模块的代码,也是Nginx服务的入口
event/ Nginx 自身对事件处理逻辑的封装
http/ HTTP协议处理模块的代码,Nginx作为WEB服务器和代理服务器运行时的核心模块
mali/ Mail处理模块的代码,Nginx作为pop3/imap/smtp代理服务器运行时的核心模块
misc/ nginx 的一些utils,定义了test和profiler的一些外围模块的逻辑
os/ Nginx对各个平台抽象逻辑的封装,目前只有unix系
Nginx可以开启多个进程,每个进程拥有最大上限128个子线程以及一定的可用连接数。
如果希望使用线程可以在配置文件中设置worker_threads这个参数,但这个参数在Nginx官方手册上没有。
只有通过阅读源代码才看到。最大客户端连接数等于进程数与连接数的乘积,连接是在主进程中初始化的,一开始所有连接处于空闲状态。
每一个客户端请求进来以后会通过事件处理机制,在Linux是Epoll,在FreeBSD下是KQueue放到空闲的连接里。
如果设置了线程数,那么被填充的连接会在子线程中处理,否则会在主线程中依次处理。
如果解析出是动态脚本请求,会根据fast-cgi的设置访问php-cgi进程,php进程数量的多少依据php-fpm.conf中max_children的设置。
因此Nginx的动态请求能力不仅仅依靠Nginx本身的设置,还要调试php-fpm。
从源代码级别上看nginx由以下几个元素组成:
1. worker(进程)
2. thread(线程)
3. connection(连接)
4. event(事件)
5. module(模块)
6. pool(内存池)
7. cycle(全局设置)
8. log(日志)
connection和event是按照链表的方式进行存放的,区别在于connection是单向链表而event是双向链表。
nginx由若干模块组成,但所有模块全部采用静态编译的办法。