以r->phase_handler为下标,调用相应的check函数,具体的check函数实现逻辑决定了r→phase_handler的变化,以及check函数的返回值决定了是否将控制流程交付给事件处理模块,即如果某个check函数返回了 NGX_OK,那么http模块就将控制流交付给了事件处理模块。 而check函数的返回值又和具体的钩子返回值有关,所以为了能够了解请...
在解析完请求行后,nginx会设置读事件的handler为ngx_http_process_request_headers,然后后续的请求就在ngx_http_process_request_headers中进行读取与解析。ngx_http_process_request_headers函数用来读取请求头,跟请求行一样,还是调用ngx_http_read_request_header来读取请求头,调用ngx_http_parse_header_line来解析...
1 若handler返回NGX_DECLINED,则会执行下一个钩子(举例来说,如果当前阶段有多个钩子,那么会继续在当前阶段执行下一个钩子,若该阶段只有这一个钩子,那么会流转到下一个阶段执行钩子),它将r→phase_handler++。同时check返回AGAIN(保留控制流权) 2若handler返回NGX_DONE,那么表示该handler没有处理完,需要多次调度才能...
12章节中已经提到请求的行和请求的头已经处理完,随即就要进行http阶段的处理,处理的入口是ngx_http_process_request---ngx_http_handler---ngx_http_core_run_phases,这时维持的connetion状态如下图所示,跟12章节最后的图是一样的,方便阅读,贴到了这里。 接下来会将遍历小蔡那儿保留的一维数组cmcf->phase_engine...
NGX_HTTP_POST_READ_PHASE = 0, NGX_HTTP_SERVER_REWRITE_PHASE, NGX_HTTP_FIND_CONFIG_PHASE, NGX_HTTP_REWRITE_PHASE, NGX_HTTP_POST_REWRITE_PHASE, NGX_HTTP_PREACCESS_PHASE, NGX_HTTP_ACCESS_PHASE, NGX_HTTP_POST_ACCESS_PHASE, NGX_HTTP_PRECONTENT_PHASE, ...
NGINX有一个主进程(master process)(执行特定权限的操作,如读取配置、绑定端口)和一系列工作进程(worker process)和辅助进程(helper process)。如下图所示: 如下所示: # service nginx restart * Restarting nginx # ps -ef --forest | grep nginx root 32475 1 0 13:36 ? 00:00:00 nginx: master process...
NGX_HTTP_TRY_FILES_PHASE阶段(ngx_http_core_try_files_phase) NGX_HTTP_CONTENT_PHASE阶段(ngx_http_core_content_phase) NGX_HTTP_LOG_PHASE阶段(ngx_http_log_module中的ngx_http_log_handler) 就像把大象放冰箱需要几步,处理 HTTP 需要11步,这11个步骤,有的是处理配置文件,有的是处理rewrite,有的是处理...
一般情况下,我们自定义的模块,大多数是挂载在 NGX_HTTP_CONTENT_PHASE 阶段的,默认也就是属于这个模块。 有几个阶段是特例,它们没有 Hook 挂载点(也就意味着,在这几个阶段不允许挂载任何第三方处理逻辑),它们仅由 HTTP 框架实现: NGX_HTTP_FIND_CONFIG_PHASE NGX_HTTP_POST_ACCESS_PHASE NGX_HTTP_POST_REWRIT...
NGINX有一个主进程(master process)(执行特定权限的操作,如读取配置、绑定端口)和一系列工作进程(worker process)和辅助进程(helper process)。如下图所示: 如下所示: # service nginx restart * Restarting nginx # ps -ef --forest | grepnginxroot324751013:36?00:00:00nginx:masterprocess /usr/sbin/nginx-...
接下来探究upstream_header_time,可在ngx_http_upstream_send_request函数末尾调用的ngx_http_upstream_process_header中发现header_time的赋值语句:2047 static void2048 ngx_http_upstream_process_header(ngx_http_request_t *r, ngx_http_upstream_t *u)2049 {...20582059 c->log->action = "reading res...