当前位置 主页 > 服务器问题 > nginx问题汇总 >

nginx处理http请求实例详解

栏目:nginx问题汇总 时间:2018-10-10 16:23

这篇文章主要介绍了nginx处理http请求实例详解的相关资料,需要的朋友可以参考下

     本文在这基础上分析nginx服务器收到http请求行、请求头部后,http框架是如何调度各个http模块共同完成这个http请求。例如: http框架调度静态模块,获取服务器目录下的某个html页面返回给客户端; 或者http框架调度access权限访问模块,判断这个客户端是否有权限访问服务器。

一、event事件与http框架的交互

        在接收完http请求行、http请求头部后,会调用ngx_http_process_request这个函数开始处理http请求。因为一个http请求由11个处理阶段组成,而每一个处理阶段都允许多个http模块介入,因此在这个函数中,将调度各个阶段的http模块共同完成这个请求。

//接收到http请求行与请求头后,http的处理流程,是第一个http处理请求的读事件回调 //这个函数执行后,将把读写事件的回调设置为ngx_http_request_handler。这样下次再有事件时 //将调用ngx_http_request_handler函数来处理,而不会再调用ngx_http_process_request了 static void ngx_http_process_request(ngx_http_request_t *r) {   ngx_connection_t *c;   c = r->connection;   //因为已经接收完http请求行、请求头部了,准备调用各个http模块处理请求了。   //因此需要接收任何来自客户端的读事件,也就不存在接收http请求头部超时问题   if (c->read->timer_set)    {     ngx_del_timer(c->read);   }   //重新设置当前连接的读写事件回调   c->read->handler = ngx_http_request_handler;   c->write->handler = ngx_http_request_handler;   //设置http请求对象的读事件回调,这个回调不做任何的事情。   //那http请求对象的读事件回调,与上面的连接对应的读事件回调有什么关系呢?   //当读事件发生后,连接对应的读事件回调ngx_http_request_handler会被调用,   //在这个回调内会调用http请求对象的读事件回调ngx_http_block_reading,而这个回调是   //不会做任何事件的,因此相当于忽略了读事件。因为已经接收完了请求行请求头,现在要做的是调用各个http模块,   //对接收到的请求行请求头进行处理   r->read_event_handler = ngx_http_block_reading;    //调用各个http模块协同处理这个请求   ngx_http_handler(r);   //处理子请求   ngx_http_run_posted_requests(c); }

      ngx_http_process_request函数只会被调用一次。如果一次调度并不能处理完11个http阶段,那会将连接对象对应的读事件、写事件回调设置为ngx_http_request_handler。而请求对象的读事件设置为ngx_http_block_reading, 请求对象的写事件回调设置为ngx_http_core_run_phases, 这个回调在ngx_http_handler内设置。这样在事件再次到来时不会调用

ngx_http_process_request函数处理了。那event事件模块的读写事件回调与http请求对象的读写事件回调有什么关系呢?

//http请求处理读与写事件的回调,在ngx_http_process_request函数中设置。 //这个函数中将会调用http请求对象的读写事件回调。将event事件模块与http框架关联起来 static void ngx_http_request_handler(ngx_event_t *ev) {   //如果同时发生读写事件,则只有写事件才会触发。写事件优先级更高   if (ev->write)    {     r->write_event_handler(r);  //在函数ngx_http_handler设置为:ngx_http_core_run_phases    }   else   {     r->read_event_handler(r);  //在函数ngx_http_process_request设置为:ngx_http_block_reading   }    //处理子请求   ngx_http_run_posted_requests(c); } 



缩小 缩小 缩小 缩小
IIS7整站下载工具 IIS7批量查询排名 IIS7远程桌面连接工具 iis7-iis网站批量管理 iis7批量替换工具 IIS7服务器专用下载工具 IIS7日志分析工具 IIS7批量PING,服务器批量添加网卡IP小工具 IIS7远程同步备份工具
IIS7网站监控 站群批量SEO查询 批量获取排名域名 批量关键词排名查询 模拟各种蜘蛛 批量友情链接监测 批量检测死链 搜索引擎大全 批量查询外链
批量查询网站标题 批量查询KeyWords 批量查询描述 批量查询网站IP 批量百度收录查询 批量查询百度日收录 批量查询百度周收录 批量查询百度月收录 批量查询360总收录 批量查询360日收录 批量查询网站年龄 批量查询360PC权重 批量查询爱站移动权重 批量查询站长移动权重 批量查询360移动权重 批量查询神马权重 批量查询谷歌PR 批量查询搜狗PR 批量查询百度反链 批量查询爱站首页反链 批量查询爱站内页反链 批量查询百度快照 批量查询搜狗快照 批量icp备案查询 批量网站ip地址查询 批量查询导出链接 批量查询百度V认证 批量查询百度安全 批量查询站长PC权重 批量查询爱站PC权重 批量查询搜狗总收录 站长资源大全 IIS7-cms大全 IIS7站群大全 IIS7虚拟空间大全 IIS7服务器大全 IIS7-VPS大全