NGINX中HTTP请求的11个处理阶段

Nginx通过模块化设计处理HTTP请求,将处理过程分为11个阶段,允许多个模块协作完成。这11个阶段包括必备和可选,每个阶段可以通过 ngx_http_phase_handler_t 结构体的next成员实现非顺序执行。HTTP请求的处理关键在于ngx_http_phase_engine_t结构体,保存在全局的ngx_http_core_main_conf_t中,控制请求的执行路径。HTTP阶段由phase_engine和phases管理,其中phase_handler指定当前请求应执行的阶段。
摘要由CSDN通过智能技术生成

Nginx的模块化设计使得每一个HTTP模块可以仅专注于完成一个独立的、简单的功能,而一个请求的完整处理过程可以由无数个HTTP模块共同合作完成。这种设计有非常好的简单性、可测试性、可扩展性,然而,当多个http模块流水式地处理同一个请求时,单一的处理顺序是无法满足灵活性需求的,每一个正在处理的HTTP模块很难灵活、有效地指定下一个HTTP处理模块是哪一个。

因此,HTTP框架依据常见的处理流程将处理阶段划分为11个阶段,其中每个处理阶段都可以由任意多个HTTP模块流水式地处理请求。

typedef enum {
    //在接收到完整的HTTP头部后处理的HTTP阶段
    NGX_HTTP_POST_READ_PHASE = 0,
 
    //在请求的URI与location表达式匹配前,修改请求的URI(重定向),是一个独立的HTTP阶段
    NGX_HTTP_SERVER_REWRITE_PHASE,
 
    //根据请求的URI寻找匹配的location表达式,这个阶段只能由
    NGX_HTTP_FIND_CONFIG_PHASE,
         
    //在NGX_HTTP_FIND_CONFIG_PHASE阶段寻找到匹配的location之后再修改请求的URI
    NGX_HTTP_REWRITE_PHASE,
         
    //这一阶段是用于在rewrite重写URL后,防止错误的nginx.conf配置导致死循环(递归地修改URI)
    NGX_HTTP_POST_REWRITE_PHASE,
 
    //表示在处理NGX_HTTP_ACCESS_PHASE阶段觉得请求的访问权限前,HTTP模块可以介入的处理阶段
    NGX_HTTP_P
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值