首先简单介绍下配置系统,因为之后的内容与这个有一定的关系。 在nginx.conf中,包含若干配置项,每个配置项由配置指令和指令参数2部分组成,指令参数即配置指令对应的配置值,可以简单认为配置项就是一个Key/value对。
注意,配置指令如果包含空格需要用单引号或双引号括起来,指令参数如果是由简单字符串构成的简单配置项则需要以分号结束,如果指令参数是复杂配置项则需要用{}括起来。
main:Nginx在运行时与具体业务功能无关的参数,比如工作进程数、运行身份等。
nginx core实现了底层的通讯协议,为其它模块和Nginx进程构建了基本的运行时环境,并且构建了其它各模块的协作基础。
http模块和mail模块位于nginx core和各功能模块的中间层,这2个模块在nginx core之上实现了另外一层抽象,分别处理与http协议和email相关协议(SMTP/IMAP/POP3)有关的事件,并且确保这些事件能被以正确的顺序调用其它的一些功能模块。 2)phase handler:此类型的模块也被直接称为handler模块,主要负责处理客户端请求并产生待响应内容,比如ngx_http_module模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。 3)output filter:也称为filter模块,主要是负责对输出的内容进行处理,可以对输出进行修改,比如可以实现对输出的所有html页面增加预定义的footbar一类的工作,或者对输出的图片的URL进行替换之类的工作。 4)upstream:实现反向代理功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端,upstream模块是一种特殊的handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。 5)load-balancer:负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。 6)extend module:根据特定业务需要编写的第三方模块。
三、请求处理
NGX_HTTP_POST_READ_PHASE:读取请求内容阶段
NGX_HTTP_SERVER_REWRITE_PHASE:Server请求地址重写阶段 NGX_HTTP_FIND_CONFIG_PHASE:配置查找阶段 NGX_HTTP_REWRITE_PHASE:Location请求地址重写阶段 NGX_HTTP_POST_REWRITE_PHASE:请求地址重写提交阶段 NGX_HTTP_PREACCESS_PHASE:访问权限检查准备阶段 NGX_HTTP_ACCESS_PHASE:访问权限检查阶段 NGX_HTTP_POST_ACCESS_PHASE:访问权限检查提交阶段 NGX_HTTP_TRY_FILES_PHASE:配置项try_files处理阶段 NGX_HTTP_CONTENT_PHASE:内容产生阶段 NGX_HTTP_LOG_PHASE:日志模块处理阶段
在内容产生阶段,为了给一个request产生正确的response,Nginx必须把这个请求交给一个合适的content handler去处理。如果这个request对应的location在配置文件中被明确指定了一个content handler,那么Nginx就可以通过对location的匹配,直接找到这个对应的handler,并把这个request交给这个content handler去处理。这样的配置指令包括perl、flv、proxy_pass、mp4等。 |