欢迎来到站长教程网!

Nginx

当前位置:主页 > 服务器教程 > Nginx >

nginx处理惩罚http请求实例详解

时间:2021-05-04|栏目:Nginx|点击:

     本文在这基本上阐明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请求工具的读写事件回调有什么干系呢?

nginx处理惩罚处罚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); 
} 

可以看到,毗连工具的读事件回调中,会挪用http请求工具的读事件回调。毗连工具的写事件回调会挪用http请求工具的写事件回调。

nginx处理惩罚处罚http请求实例详解

        图中可看出,在event的读事件产生时,epoll返回后会挪用读事件的回调ngx_http_request_handler。在这个读事件回调中,又会挪用http框架,也就是http请求工具的读事件回调ngx_http_block_reading,这个http请求工具的读事件回调是不做任何工作的,相当于忽略读事件。因此http框架将会返回到事件模块。那为什么要忽略读事件呢?因为http请求行、请求头部都已经全部吸收完成了, 此刻要做的是调治各个http模块配合协作,完成对吸收到的请求行,请求头部的处理惩罚。因此不需要吸收来自客户端任何数据了。

        nginx处理惩罚处罚http请求实例详解

        对付写事件的处理惩罚就巨大多了,  在event的写事件产生时,epoll返回后会挪用写事件的回调ngx_http_request_handler,在这个写事件回调中,又会挪用http框架,也就是http请求工具的写事件回调ngx_http_core_run_phases。这个http框架的回调会调治参与11个请求阶段的各个http模块的hander要领,配合完成http请求。

二、调治http模块处理惩罚请求

上一篇:Nginx扬弃http包体处理惩罚实例详解

栏    目:Nginx

下一篇:详解Nginx设置SSL证书实现Https会见

本文标题:nginx处理惩罚http请求实例详解

本文地址:www.jiaocheng88.com.cn/Nginx/61861.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:584415406 | 邮箱:584415406#qq.com(#换成@)

Copyright © 2015-2020 小白站长教程网 版权所有 苏ICP备20040415号-3