当前位置: 首页 > news >正文

Nginx的请求处理

本文分享自天翼云开发者社区《Nginx的请求处理》.作者:小谢不用谢

Nginx的请求处理流程

    worker进程中,ngx_worker_process_cycle()函数就是这个无限循环的处理函数。在这个函数中,一个请求的简单处理流程如下:

 (1)操作系统提供的机制(例如epoll, kqueue等)产生相关的事件。

 (2)接收和处理这些事件,如是接受到数据,则产生更高层的request对象。

 (3)处理request的header和body。

 (4)产生响应,并发送回客户端。

 (5)完成request的处理。

 (6)重新初始化定时器及其他事件。

为了让大家更好的了解nginx中请求处理过程,我们以HTTP Request为例,来做一下详细地说明。

从nginx的内部来看,一个HTTP Request的处理过程涉及到以下几个阶段。

 (1)初始化HTTP Request(读取来自客户端的数据,生成HTTP Request对象,该对象含有该请求所有的信息)。

 (2)处理请求头。

 (3)处理请求体。

 (4)如果有的话,调用与此请求(URL或者Location)关联的handler。

 (5)依次调用各phase handler进行处理。

在这里,我们需要了解一下phase handler这个概念。phase字面的意思,就是阶段。所以phase handlers也就好理解了,就是包含若干个处理阶段的一些handler。

    在每一个阶段,包含有若干个handler,再处理到某个阶段的时候,依次调用该阶段的handler对HTTP Request进行处理。通常情况下,一个phase handler对这个request进行处理,并产生一些输出。通常phase handler是与定义在配置文件中的某个location相关联的。

一个phase handler通常执行以下几项任务:

 (1)获取location配置。

 (2)产生适当的响应。

 (3)发送response header。

 (4)发送response body。

当nginx读取到一个HTTP Request的header的时候,nginx首先查找与这个请求关联的虚拟主机的配置。如果找到了这个虚拟主机的配置,那么通常情况下,这个HTTP Request将会经过以下几个阶段的处理(phase handlers):

NGX_HTTP_POST_READ_PHASE:  读取请求内容阶段

NGX_HTTP_SERVER_REWRITE_PHASE:  Server请求地址重写阶段

NGX_HTTP_FIND_CONFIG_PHASE:  配置查找阶段:

NGX_HTTP_REWRITE_PHASE:  Location请求地址重写阶段

NGX_HTTP_POST_REWRITE_PHASE:  请求地址重写提交阶段

NGX_HTTP_PREACCESS_PHASE:  访问权限检查准备阶段

NGX_HTTP_ACCESS_PHASE:  访问权限检查阶段

NGX_HTTP_POST_ACCESS_PHASE:  访问权限检查提交阶段

NGX_HTTP_TRY_FILES_PHASE:  配置项try_files处理阶段

NGX_HTTP_CONTENT_PHASE:  内容产生阶段

NGX_HTTP_LOG_PHASE:   日志模块处理阶段

在内容产生阶段,为了给一个request产生正确的响应,nginx必须把这个request交给一个合适的content handler去处理。如果这个request对应的location在配置文件中被明确指定了一个content handler,那么nginx就可以通过对location的匹配,直接找到这个对应的handler,并把这个request交给这个content handler去处理。这样的配置指令包括像,perl,flv,proxy_pass,mp4等。

如果一个request对应的location并没有直接有配置的content handler,那么nginx依次尝试:

 (1)如果一个location里面有配置 random_index on,那么随机选择一个文件,发送给客户端。

 (2)如果一个location里面有配置 index指令,那么发送index指令指明的文件,给客户端。

 (3)如果一个location里面有配置 autoindex on,那么就发送请求地址对应的服务端路径下的文件列表给客户端。

 (4)如果这个request对应的location上有设置gzip_static on,那么就查找是否有对应的.gz文件存在,有的话,就发送这个给客户端(客户端支持gzip的情况下)。

 (5)请求的URI如果对应一个静态文件,static module就发送静态文件的内容到客户端。

内容产生阶段完成以后,生成的输出会被传递到filter模块去进行处理。filter模块也是与location相关的。所有的fiter模块都被组织成一条链。输出会依次穿越所有的filter,直到有一个filter模块的返回值表明已经处理完成。

http://www.hn-smt.com/news/5725/

相关文章:

  • 2025年仪器计量制造企业权威推荐榜单:计量检测服务/仪器类检测/计量检测源头厂家精选
  • 2025年网络隔离变压器优质厂家权威推荐榜单:以太网变压器/数据泵/网络变压器源头厂家精选
  • 框架工具
  • ubuntu 22 vnc
  • Channel Sounding 对比AOA优点
  • 学习笔记:乘法逆元
  • 电视剧推荐《脱轨》
  • 【IEEE出版 | 连续六届稳定EI检索 | 往届快至会后3.5个月检索!】第七届电子工程与信息学国际学术会议(EEI 2025)
  • 【ACM出版 | ACM出版社目前快至见刊后1个月EI、Scopus检索】2025年数字化社会与智能计算国际学术会议 (ICDSIC 2025)
  • 2025年斗山焕新升级全解析:技术突破与市场领先深度揭秘
  • 2025 年尼丝纺里布,胆布里布,高弹里布,四面弹里布厂家最新推荐,技术实力与市场口碑深度解析
  • HttpRunner-7-用例分层-httprunner-7
  • 测试开发必看!JVM调优10大技巧,性能瓶颈瞬间搞定
  • 2025年10月滁州律师事务所推荐榜:安徽环滁律师事务所领跑
  • nginx和微服务中网关
  • 2025 年珠海装修公司最新推荐榜,聚焦企业技术实力、服务品质与市场口碑深度解析珠海豪宅/珠海品质/珠海口碑好的/珠海大宅/珠海设计工作室推荐
  • 解析视频汇聚平台EasyCVR强大的设备统一管理能力,助力构筑安防融合感知的基石
  • Java 对象与类
  • 跟客宝 SCRM 微信小程序系统:一站式客户管理与销售赋能解决方案
  • 当Dify遇见Selenium:可视化编排UI自动化测试,原来如此简单
  • 2025 年 HDPE 土工膜,聚乙烯土工膜,糙面土工膜厂家最新推荐,产能、专利、环保三维数据透视!
  • The lifelong path of human
  • 2025年10月中国精益生产咨询公司十强榜:客观评测与选择指引
  • 西南电线电缆供应厂家:卓越品质与创新技术的完美结合
  • 口碑好的照明路灯工厂:探索行业领先的照明解决方案
  • 2025年10月中国营销管理咨询公司实力榜:十家口碑排名全解析
  • 西安买房开发商推荐:2025年西安购房智慧选择
  • [MySQL] H马 MySQL数据库基础进阶运维视频教程2022年1月
  • 2025年10月中国管理咨询公司对比榜:金蓝盟与五家机构参数化评测
  • 2025年10月卖得好的学习机品牌推荐:销量排行五强横向评测