搜索
首页后端开发php教程《深入理解Nginx》笔记之 HTTP请求的11个处理阶段

HTTP请求的11个处理阶段

<code>typedef <span>enum</span> {
    <span>// 接收到完整的HTTP头部后处理阶段</span>
    NGX_HTTP_POST_READ_PHASE = <span>0</span>,

    <span>// 将请求URI与location表达式匹配前,修改URI,即重定向阶段</span>
    NGX_HTTP_SERVER_REWRITE_PHASE,

    <span>// 只能由ngx_http_core_module模块实现,用于根据请求URI寻找location表达式</span>
    NGX_HTTP_FIND_CONFIG_PHASE,

    <span>// 上一过程结束后修改URI</span>
    NGX_HTTP_REWRITE_PHASE,

    <span>// 为了防止rewrite造成死循环(一个请求执行10次会被Nginx认定为死循环)</span>
    NGX_HTTP_POST_REWRITE_PHASE,

    <span>// 在“决定请求访问权限”阶段前</span>
    NGX_HTTP_PREACCESS_PHASE,

    <span>// 决定访问权阶段,判断该请求是否可以访问Nginx服务器</span>
    NGX_HTTP_ACCESS_PHASE,

    <span>// 当然请求不被允许访问Nginx服务器时,该阶段负责向用户返回错误响应</span>
    NGX_HTTP_POST_ACCESS_PHASE,

    <span>// 用try_files配置项。顺序访问多个静态文件资源阶段</span>
    NGX_HTTP_TRY_FILES_PHASE,

    <span>// 处理HTTP请求内容阶段,这是大部分HTTP模块介入的阶段</span>
    NGX_HTTP_CONTENT_PHASE,

    <span>// 记录日志阶段</span>
    NGX_HTTP_LOG_PHASE
} ngx_http_phases;</code>

处理阶段的数据结构

<code><span>typedef</span><span>struct</span> ngx_http_phase_handler_s  ngx_http_phase_handler_t;

<span>// 一个HTTP阶段的checker检查方法,仅有HTTP框架实现</span><span>typedef</span> ngx_int_t (*ngx_http_phase_handler_pt)(ngx_http_request_t *r,
    ngx_http_phase_handler_t *ph);

<span>// 由HTTP模块实现的handler处理方法</span><span>typedef</span> ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r);

<span>struct</span> ngx_http_phase_handler_s {
     <span>// 在处理一个HTTP阶段时,最先调用这个checker检查方法,在checker方法中调用模块实现的handler方法</span>
    ngx_http_phase_handler_pt  checker;

    <span>// 用于定义HTTP模块处理方法</span>
    ngx_http_handler_pt        handler;

    <span>// 将要执行的下一个HTTP处理阶段序号,可以不按顺序执行(这些处理阶段结构体都被存放在一个数组中,所以可以有下标序号</span>
    ngx_uint_t                 next;
};</code>

      在一个http{}块解析完后,会根据nginx.conf中的配置项产生由ngx_http_phase_handler_t(上述结构)组成的数组。在处理HTTP请求时,按照next的顺序执行。这个组成的数组,被作为另一个结构体:

ngx_http_phase_engine_t

<code><span>typedef</span><span>struct</span> {
    <span>// 由ngx_http_phase_handler_t构成的数组首地址,表示一个请求可能经历的所有ngx_http_handler_pt处理方法</span>
    ngx_http_phase_handler_t  *handlers;

    <span>// 表示NGX_HTTP_SERVER_REWRITE_PHASE阶段第一个ngx_http_phase_handler_t处理方法在handlers数组中的序号</span>
    ngx_uint_t                 server_rewrite_index;

    <span>// 表示NGX_HTTP_REWRITE_PHASE阶段第一个ngx_http_phase_handler_t处理方法在handlers数组中的序号</span>
    ngx_uint_t                 location_rewrite_index;
} ngx_http_phase_engine_t;</code>

      这个数组被保存在了ngx_http_core_main_conf_t结构中:

<code>typedef struct {
    ngx_http_phase_engine_t         phase_engine;
    <span>...</span>
    // 在HTTP框架初始化时帮助各个HTTP模块在任意阶段中添加HTTP处理方法,它是一个有<span>11</span>个ngx_http_phase_t成员的数组,在初始化完毕后是没用的
    ngx_http_phase_t                    phases[NGX_HTTP_LOG_PHASE + <span>1</span>];
    <span>...</span>
} ngx_http_core_main_conf_t;</code>

ngx_http_phase_t

<code><span>typedef</span><span>struct</span> {
    <span>// handlers动态数组保存着每一个HTTP模块初始化时添加到当前阶段处理方法</span>
    ngx_array_t                     handlers;
}   ngx_http_phase_t;</code>

版权声明:Pain is just in your mind.

以上就介绍了《深入理解Nginx》笔记之 HTTP请求的11个处理阶段,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Springboot怎么使用内置tomcat禁止不安全HTTPSpringboot怎么使用内置tomcat禁止不安全HTTPMay 12, 2023 am 11:49 AM

Springboot内置tomcat禁止不安全HTTP方法1、在tomcat的web.xml中可以配置如下内容让tomcat禁止不安全的HTTP方法/*PUTDELETEHEADOPTIONSTRACEBASIC2、Springboot使用内置tomcat没有web.xml配置文件,可以通过以下配置进行,简单来说就是要注入到Spring容器中@ConfigurationpublicclassTomcatConfig{@BeanpublicEmbeddedServletContainerFacto

JAVA发送HTTP请求的方式有哪些JAVA发送HTTP请求的方式有哪些Apr 15, 2023 am 09:04 AM

1.HttpURLConnection使用JDK原生提供的net,无需其他jar包,代码如下:importcom.alibaba.fastjson.JSON;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.net.HttpURLConnection;

nginx中如何升级到支持HTTP2.0nginx中如何升级到支持HTTP2.0May 24, 2023 pm 10:58 PM

一、前言#ssl写在443端口后面。这样http和https的链接都可以用listen443sslhttp2default_server;server_namechat.chengxinsong.cn;#hsts的合理使用,max-age表明hsts在浏览器中的缓存时间,includesubdomainscam参数指定应该在所有子域上启用hsts,preload参数表示预加载,通过strict-transport-security:max-age=0将缓存设置为0可以撤销hstsadd_head

Nginx的HTTP2协议优化与安全设置Nginx的HTTP2协议优化与安全设置Jun 10, 2023 am 10:24 AM

随着互联网的不断发展和改善,Web服务器在速度和性能上的需求也越来越高。为了满足这样的需求,Nginx已经成功地掌握了HTTP2协议并将其融入其服务器的性能中。HTTP2协议要比早期的HTTP协议更加高效,但同时也存在着特定的安全问题。本文将为您详细介绍如何进行Nginx的HTTP2协议优化和安全设置。一、Nginx的HTTP2协议优化1.启用HTTP2在N

Python的HTTP客户端模块urllib与urllib3怎么使用Python的HTTP客户端模块urllib与urllib3怎么使用May 20, 2023 pm 07:58 PM

一、urllib概述:urllib是Python中请求url连接的官方标准库,就是你安装了python,这个库就已经可以直接使用了,基本上涵盖了基础的网络请求功能。在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。Python3.x中将urllib2合并到了urllib,之后此包分成了以下四个模块:urllib.request:它是最基本的http请求模块,用来模拟发送请求urllib.error:异常处理模块,如果出现错误可以捕获这些异常urllib

Nginx中HTTP的keepalive怎么配置Nginx中HTTP的keepalive怎么配置May 12, 2023 am 11:28 AM

httpkeepalive在http早期,每个http请求都要求打开一个tpcsocket连接,并且使用一次之后就断开这个tcp连接。使用keep-alive可以改善这种状态,即在一次tcp连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少time_wait状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。但是,keep-ali

Nginx http运行状况健康检查如何配置Nginx http运行状况健康检查如何配置May 14, 2023 pm 06:10 PM

被动检查对于被动健康检查,nginx和nginxplus会在事件发生时对其进行监控,并尝试恢复失败的连接。如果仍然无法恢复正常,nginx开源版和nginxplus会将服务器标记为不可用,并暂时停止向其发送请求,直到它再次标记为活动状态。上游服务器标记为不可用的条件是为每个上游服务器定义的,其中包含块中server指令的参数upstream:fail_timeout-设置服务器标记为不可用时必须进行多次失败尝试的时间,以及服务器标记为不可用的时间(默认为10秒)。max_fails-设置在fai

怎么利用Java实现调用http请求怎么利用Java实现调用http请求Jun 02, 2023 pm 04:57 PM

一、概述在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等)。在Java项目中调用第三方接口的方式有:1、通过JDK网络类Java.net.HttpURLConnection;2、通过common封装好的HttpClient;3、通过Apache封装好的CloseableHttpClient;4、通过SpringBoot-RestTemplate;二、Java调用第三方

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用