nginx_http_phases

nginx源码分析--状态机模型 nginx在处理客户端发来的http数据,主要是通过11个阶段的处理,形成了状态机模式。 typedef struct { ngx_array_t servers; /* ngx_http_core_srv_conf_t */ //http框架初始化后各个http模块构造的处理方法组成phase_engine,由下面各阶段处理方法构成的phase数组构建的阶段引擎才是流水式处理http请求的实际数据结构 ngx_http_phase_en 阅读详情
当接收到一个http请求的时候将解析其头部和body到ngx_http_request_t,接着将进行大量的phase操作。
一个http请求分11个phase, 处理是有顺序的,NGX_HTTP_POST_READ_PHASE为第一个,一个接着一个处理。
  1. typedef enum {  
  2.     //读取请求phase  
  3.     NGX_HTTP_POST_READ_PHASE = 0,                       //第一个  
  4.        
  5.     //开始处理  
  6.     //这个阶段主要是处理全局的(server block)的rewrite  
  7.     NGX_HTTP_SERVER_REWRITE_PHASE,  
  8.   
  9.     //这个阶段主要是通过uri来查找对应的location。然后将uri和location的数据关联起来  
  10.     NGX_HTTP_FIND_CONFIG_PHASE,  
  11.               
  12.     //这个主要处理location的rewrite。    
  13.     NGX_HTTP_REWRITE_PHASE,  
  14.     //post rewrite,这个主要是进行一些校验以及收尾工作,以便于交给后面的模块。  
  15.     NGX_HTTP_POST_REWRITE_PHASE,  
  16.       
  17.     //比如流控这种类型的access就放在这个phase,也就是说它主要是进行一些比较粗粒度的access。    
  18.     NGX_HTTP_PREACCESS_PHASE,  
  19.     //这个比如存取控制,权限验证就放在这个phase,一般来说处理动作是交给下面的模块做的.这个主要是做一些细粒度的access。  
  20.     NGX_HTTP_ACCESS_PHASE,  
  21.     //当上面的access模块得到access_code之后就会由这个模块根据access_code来进行操作  
  22.     NGX_HTTP_POST_ACCESS_PHASE,  
  23.     //try_file模块,也就是对应配置文件中的try_files指令。   
  24.     NGX_HTTP_TRY_FILES_PHASE,  
  25.     //内容处理模块,我们一般的handle都是处于这个模块,比如说模块扩展也将是该phase, 默认调用ngx_http_autoindex_module.c中的ngx_http_autoindex_handler handler    
  26.     NGX_HTTP_CONTENT_PHASE,  
  27.     //log模块   
  28.     NGX_HTTP_LOG_PHASE  
  29. } ngx_http_phases;  

在ngx_http_core_module.c文件中有一处理函数来处理这些phases,直到输出过滤到客户端。
  1. void  
  2. ngx_http_core_run_phases(ngx_http_request_t *r)  
  3. {  
  4.     ngx_int_t                   rc;  
  5.     ngx_http_phase_handler_t   *ph;  
  6.     ngx_http_core_main_conf_t  *cmcf;  
  7.   
  8.     cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);  
  9.   
  10.     ph = cmcf->phase_engine.handlers;  
  11.   
  12.     while (ph[r->phase_handler].checker) {              //循环phases         
  13.   
  14.         rc = ph[r->phase_handler].checker(r, &ph[r->phase_handler]);  
  15.         if (rc == NGX_OK) {  
  16.             return;  
  17.         }  
  18.     }  
  19. } 
nginx的多阶段请求处理 读取完请求头后,nginx进入请求的处理阶段。简单的情况下,客户端发送过的统一资源定位符(url)对应服务器上某一路径上的资源,web服务器需要做的仅仅是将url映射到本地文件系统的路径,然后读取相应文件并返回给客户端。但这仅仅是最初的互联网的需求,而如今互联网出现了各种各样复杂的需求,要求web服务器能够处理诸如安全及权限控制,多媒体内容和动态网页等等问题。这些复杂的需求导致web服务器不再是一 阅读详情

相关推荐

Windows域账户无管理员权限也能装软件?3步搞定UAC设置(附安全提醒)

本文探讨了在Windows域环境中,如何通过配置用户账户控制(UAC)实现临时提权,让无管理员权限的域账户也能安装软件。文章详细介绍了三步走策略:临时加入本地管理员组、调整UAC行为以及至关重要的权限回收,并提供了脚本化部署方案与安全实践指南,旨在平衡企业IT管理的效率与安全。

fox11的博客 757

Nginx 的ngx_http_phases

typedef enum { //http头接收完     NGX_HTTP_POST_READ_PHASE = 0, //URL rewrite,在查询URI之前    NGX_HTTP_SERVER_REWRITE_PHASE, //根据URI查找location,ngx_http_core_module模块实现。    NGX_HTTP_FIND_CONFIG_PHASE

加菲猫爱上紫罗兰 的专栏 797

RK3588 EVB开发板原理图讲解【六】

该原理图展示了eMMC Flash与主控芯片之间的连接关系,以及相关的电源、信号线路和去耦电容等。

weixin_48721556的博客 1170

Nginx 11个阶段

typedef enum { NGX_HTTP_POST_READ_PHASE = 0, //读取请求头 NGX_HTTP_SERVER_REWRITE_PHASE, //执行rewrite NGX_HTTP_FIND_CONFIG_PHASE, //根据uri替换location NGX_HTTP_REWRITE_PHASE, //根据替换结果继续执

kingwz66的博客 295

PRIDE PPP-AR软件实战:从ZTD解算到PWV反演的全流程避坑指南

本文详细解析了使用PRIDE PPP-AR软件进行GNSS数据处理的全流程,重点涵盖从ZTD解算到PWV反演的关键步骤与精度评估。文章深入剖析了软件部署、数据准备、参数配置中的常见“坑点”,并提供了与IGS ZTD及ERA5产品进行交叉验证的实用方法,旨在帮助用户高效、准确地获取高精度大气可降水量产品。

p8q9r0的博客 605

天融信防火墙NGFW4000(TG-4628)安装配置笔记

配置一台全新的天融信防火墙NGFW4000,配置完后,内网用户10.10.1.0/24和10.10.2.0/24可以通过防火墙上网,外网用户可以通过访问防火墙的外网接口地址来访问内网的WEB服务器10.10.1.200,并且内网用户也可以通过WEB服务器的外网地址进行访问。 网络说明: 防火墙外网接口地址:218.90.123.121/30 防火墙内网接口地址:19...

weixin_33671935的博客 4455

Nginx源码分析 - HTTP模块篇 - HTTP模块的阶段处理PHASE handler(23)

目录 一、HTTP模块11个阶段处理 二、阶段处理的初始化ngx_http_block 三、阶段处理过程ngx_http_core_run_phases 四、挂载自定义模块 上一章我们讲解了HTTP request的解析过程。我们基本知道了Nginx是如何解析HTTP的行和头。 这一章我们主要讲解Nginx的阶段处理(PHASE 状态机实现)。阶段处理的概念如何理解,我举个例子:一个HTTP请求过来,除了解析HTTP的行和头外,还需要解析URI的rewrite、接受HTTP BODY中的POST

alpha_love的博客 352

09、Flutter FFI Dart Native API

本文介绍了 Dart Native API 的基本用法,解决了 Dart 与 C 异步通讯的问题

eieihihi的专栏 4398

nginx 源码分析:http 请求处理流程——返回响应

先来回顾一下,我们的分析流程使用如下的配置文件: events { } http { server { listen 80; location / { root html; index index.html index.htm; } } ...

alenliu's blog 5236

4.2 多智能体系统的严格隔离机制:防止上下文污染与隐私数据脱敏实战

本文探讨了多智能体系统中上下文信息共享带来的安全风险与解决方案。研究发现,随着Agent数量增加,上下文信息泄露概率呈指数级上升,可能导致跨Agent错误传播、隐私泄露等问题。文章提出分层隔离架构,将上下文划分为全局共享和本地私有两部分,并通过命名空间隔离、递归压缩和隐私过滤技术确保数据安全。技术实现上,建议为每个子Agent创建独立状态空间,采用原子化更新和读写锁控制避免状态竞争。隐私保护方面,结合正则匹配和命名实体识别技术进行敏感数据过滤,确保符合GDPR等法规要求。这些措施共同构建了可靠、安全且合规的

公众号:AI前沿侦探 225

2025年开源气象大模型的实现原理与实践指南

气象大模型在人工智能时代实现了革命性突破,通过深度学习技术以更低的计算成本达到甚至超越传统数值天气预报的精度。开源气象大模型的出现使得全球研究者和机构都能参与气象AI的创新。本文详细解析了开源气象大模型的实现原理,包括核心架构、数据准备、训练方法和实际预测流程,并提供了实践指南。核心架构主要采用Transformer、图神经网络和扩散模型,处理多模态数据融合和时空联合建模。数据体系构建涉及数据来源、预处理和增强策略。模型训练关键技术包括损失函数设计、分布式训练优化和训练过程监控。微调与领域适应策略包括迁移学

专注AI大模型,软件混淆,授权 1181

Nginx源码分析之 HTTP阶段

typedef enum { /*最开始的阶段,貌似Nginx原生没有该阶段的handler*/ NGX_HTTP_POST_READ_PHASE = 0, /*配置在server块的rewrite指令,则会处理hander,否则,handler进去直接return*/ NGX_HTTP_SERVER_REWRITE_PHASE, /*根据URI进行lo...

Network, Linux Kernel 951

SVN使用:使用TortoiseSVN遇到提示请执行“清理”命令的解决方法

作为程序员来说,在团队开发过程中关于代码管理的工具使用并不陌生,比较常用的代码合并管理工具如:Git、SVN等,虽然相关工具的使用并不复杂,但是还是要掌握常用的使用方法,尤其是相关的第三方软件的使用也是极为重要的,而且有时候使用这些三方软件来进行代码管理的时候也会遇到一些问题。本篇博文就来分享一下在SVN使用的时候使用TortoiseSVN遇到提示请执行“清理”命令的解决方法,方便查阅使用。

全沾软贱开发攻城狮 1万+

nginx源码分析-ngx_http_phases说明

auth:农夫-Benemail:szjava#126.com(请把#换成@)blog:http://blog.youkuaiyun.com/zll_liang 当接收到一个http请求的时候将解析其头部和body到ngx_http_request_t,接着将进行大量的phase操作。 一个http请求分11个phase, 处理是有顺序的,NGX_HTTP_POST_READ_PHASE为第一个,一个接着

@农夫(Ben.Liang) 1481

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ngx_http_init_phases

【代码】ngx_http_init_phases。

weixin_41812346的博客 34

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

文章18 :Nginx中http请求的处理过程

虽然我不想承认,但这篇文章的确是一篇很垃圾的博文。之所以垃圾 是因为没有考虑到Nginx的事件驱动对于请求处理的影响。建议各位看官去阅读  《http://tengine.taobao.org/book/index.html》和《深入理解Nginx--陶辉》的第11章内容。 这是我写的一篇关于Nginx中http请求处理的文章,里面参考了很多牛人的博客,由于本人当时疏忽,忘记了它们的网址,不能

www.keything.net 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

nginx http handler 过程

一直容易忘记的httphandle处理过程 ngx_http_handler 起步 void ngx_http_core_run_phases(ngx_http_request_t *r) //循环处理函数 { ngx_int_t rc; ngx_http_phase_handler_t *ph; ngx_http_core_main...

linux_vae的专栏 345

ngx_http_core_run_phases

执行请求的生命周期。它遍历 Nginx 预先定义的多个阶段(如 URI 重写、访问控制、内容生成等),并调用每个阶段注册的处理函数(是一个数组,存储了 Nginx 所有 HTTP 请求处理阶段的回调函数(如 URI 重写、权限检查、内容生成等),是 Nginx HTTP 请求处理的核心调度函数,负责按照。若存在,则进入循环体;否则终止循环(请求处理完成)。会遍历这个数组,按顺序执行每个阶段的逻辑。),直到请求处理完成或提前终止。检查当前阶段是否存在有效的。

weixin_41812346的博客 681

nginx处理http请求完整流程

    在nginx的worker进程启动后,便阻塞在epoll_wait函数(ngx_epoll_process_events),等待http请求的到来,那么当一个http请求到来之时,nginx是如何作出相应的呢?下面介绍该过程。    首先,在ngx_event_process_init函数中,可看到rev->handler被初始化为函数ngx_event_accept,因此,在函数n...

detact的博客 5378

nginx http处理请求入口

nginx http 分phases进行处理; 其中的入口函数为 ngx_http_core_run_phases()#0 ngx_http_core_run_phases (r=0x770670) at src/http/ngx_http_core_module.c:834 #1 0x000000000044eaec in ngx_http_handler (r=0x770670) at s

huyangyamin的专栏 973

nginx源码分析--状态机执行

/** * 11个阶段处理HTTP请求 */ void ngx_http_core_run_phases(ngx_http_request_t *r) { ngx_int_t rc; ngx_http_phase_handler_t *ph; ngx_http_core_main_conf_t *cmcf; cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module)

mojianc的专栏 316

Nginx中http请求的处理过程

1.补充点: 如果不指定ngx_http_core_loc_conf_t ->handler,那么请求转发到默认的content phase中的handler(如ngx_http_index_handler,ngx_http_static_handler);但是如果指定了ngx_http_core_loc_conf_t ->handler,那么请求就会转发到该指定的handler中处

eric_za的专栏 9577

NGINX源码之:phase与handlers

NGINX请求处理十一个阶段,phase,checker,Handler

qq_22351805的博客 769

Nginx的请求处理流程之一:分派handler

以下只是自己学习nginx,研究其收发流程时做的笔录。以后可能还会补充。 1、ngx_http_process_request() 开始处理请求,这里设置请求的回调函数: c->read->handler = ngx_http_request_handler; //在一个流程中,读写的handler是固定的。 c->write->handler = ngx_http_request

807

Nginx源码剖析--HTTP请求的分阶段处理的初始化

前言 Nginx作为一个http服务器,核心任务就是处理HTTP请求。在接收到请求时,Nginx框架首先解析http请求,将解析结果放在ngx_http_request中,由于http是在tcp上工作的,因此解析可能会持续一段时间。nginx用状态机完成对HTTP请求的异步解析。整个解析过程都是由Nginx框架代码完成,不需要用户介入。当解析得到完整的http请求后,就开始处理http请求。ng

Swartz2015的专栏 721
上一篇: userAgent模仿
下一篇: nginx通过ngx_array_push()获取handler
Dablekai
博客等级 码龄15年 2粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值