最新公告
  • 欢迎您光临都潮汇,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • nginx对http请求处理的各个阶段详析

    nginx对http请求处理的各个阶段详析,阶段,内容,数据,模块,不太

    nginx对http请求处理的各个阶段详析

    易采站长站,站长之家为您整理了nginx对http请求处理的各个阶段详析的相关内容。

    在编写nginx的http的模块的时候,需要在各个阶段对http请求做相应的处理,以达到不同的目的,比如请求发起的时候是否有访问权限、内容生成的时候进行过滤或者其它处理等等。如果在编译nginx模块内注册的处理阶段不正确会导致达不到想要的结果,比如你想处理内容的时候内容实际上这个时候是没有的,如此等等。

    在nginx内部定义了多个阶段的类型以满足不同的处理要求(ngx_http_core_module.h中,不同版本不一样):

    typedef enum {
     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_TRY_FILES_PHASE,
     NGX_HTTP_CONTENT_PHASE,
     
     NGX_HTTP_LOG_PHASE
    } ngx_http_phases;
    

    各对应的意思分别为:

    NGX_HTTP_POST_READ_PHASE = 0  //读取请求阶段
    NGX_HTTP_SERVER_REWRITE_PHASE //URI转换阶段
    NGX_HTTP_FIND_CONFIG_PHASE   //查找相应的配置来执行阶段
    NGX_HTTP_REWRITE_PHASE    //URI转换阶段(不太清楚此处)
    NGX_HTTP_POST_REWRITE_PHASE  //对转换后的URL结果进行处理的阶段
    NGX_HTTP_PREACCESS_PHASE   //权限检查准备阶段
    NGX_HTTP_ACCESS_PHASE    //权限检查阶段
    NGX_HTTP_POST_ACCESS_PHASE  //对权限检查结果进行处理阶段
    NGX_HTTP_TRY_FILES_PHASE   //处理配置中的try_files阶段
    NGX_HTTP_CONTENT_PHASE    //处理生成返回数据阶段(此处认为不太细,当然有filter也可以忽略)
    NGX_HTTP_LOG_PHASE     //记录日志处理阶段,具体说明应当是请求完成后,关闭请求时处理
    

    从这个配置中可以分析出来nginx在处理请求的整个流程,流程是从头执行到尾的,可见LOG是放在最后面执行,对于内容段的处理一般都是在filter模块中去做,在NGX_HTTP_LOG_PHASE阶段注册的处理段也不能获取到返回的数据,返回数据在发送至客户端后就直接给释放了。因此,在各个阶段处理时应当清楚这个阶段的数据准备情况。

    正常情况下,我们可以通过如下的方式来注册我们自己的处理模块:

    static ngx_int_t
    ngx_http_xxx_init(ngx_conf_t *cf)
    {
     ngx_http_handler_pt  *h;
     ngx_http_core_main_conf_t *cmcf;
     
     cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
     
     h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
     if (h == NULL) {
     return NGX_ERROR;
     }
     
     *h = ngx_http_xxx_handler;
     
     return NGX_OK;
    }
    

    且ngx_http_xxx_up_handler的返回值只能是如下几个:

    NGX_OK        //处理成功,进入下一阶段
    NGX_DECLINED      //放弃处理
    NGX_AGAIN || NGX_DONE  //处理完成,返回该值会触发请求
    NGX_ERROR || NGX_HTTP_.. //处理错误或者HTTP的其它状态值
    

    另外对于NGX_HTTP_CONTENT_PHASE阶段,实际上还有另外一种注册方式,Just like this:

    static char *
    ngx_http_xxx_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
    {
     ngx_str_t     *value;
     ngx_url_t     u;
     ngx_http_core_loc_conf_t *clcf;
     
     clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
     
     clcf->handler = ngx_http_xxx_handler;
     
     if (clcf->name.data[clcf->name.len - 1] == '/') {
     clcf->auto_redirect = 1;
     }
     
     return NGX_CONF_OK;
    }
    

    不过这样子,你要做的东西就太多了,更多的情况下考虑下upstream结合或者对请求进行特殊处理,比如对于分布式存储的分发,需要对请求处理和文件系统关联时、比如请求的数据直接交给特殊的SERVER来拿内容时。呵呵.

    到此这篇关于nginx对http请求处理的各个阶段详析的文章就介绍到这了,更多相关nginx对http请求处理详析内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!

    以上就是关于对nginx对http请求处理的各个阶段详析的详细介绍。欢迎大家对nginx对http请求处理的各个阶段详析内容提出宝贵意见

    本网站所有源码和软件均为作者提供和网友推荐收集整理而来!
    本站提供的所有模块、软件等资源,均不提供任何技术服务,请悉知!
    如您需要商用,请支持正版,本站提供的程序仅供学习和研究使用!
    资源每天实时更新,如遇压缩包解压密码,一律为:www.dch888.cn
    如有侵犯你版权的,请来信(邮箱:68628283@qq.com)指出,本站将立即改正。
    都潮汇 » nginx对http请求处理的各个阶段详析

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    都潮汇
    互联网精品资源网站源码分享平台
    升级SVIP尊享更多特权立即升级