前言

已经到了关键的http请求的11个阶段了。

正文

概念图:

11 个阶段的处理顺序:

那么就来介绍一下:

先来了解一下postread阶段的realip这个处理,realip 是 real ip,就是获取到连接的真实地址。

如何拿到真实的用户ip地址?

  1. tcp 连接四元组

这个不可靠,因为网络中可能存在很多的代理。

比如说:

  1. http 头部x-forwareded-for 用于传递ip

  2. http 头部 x-real-ip 用户传递用户ip

拿到后就放到了变量中:

如binary_remote_addr、remote_addr 这样的变量,其值就为真是的ip,这样做连接限制。

继续介绍一下rewrite 模块。

rewrite 可以这样写:

return code [text];
return code url;
return url;

第一个就是状态码, 加上body 中返回的内容。

第二个就是code 加上url。

第三个就是之间返回url。

还有一种是error_page,这种意思就是这样的:

比如第一个例子,如果收到404,那么就从定向到404页面。

然后这里面看到上面有两个rewrite,一个是server rewrite 另一个是在 find_config 之后,也就是在location的rewrite。

而这个errorpage 也不是说location 继承了server的errorpage,而是说location 请求得到404后,server 对其进行了重置,是在请求之后的阶段。

rewrite 还有其他用法:

这个flag 是什么意思呢?有下面这些选项

--last: 用replacement 这个uri 进行新的location 匹配
--break: break 指令停止当前脚本指令的执行,等价于独立的break 指令。
--redirect: 返回302 重定向
--permanent 返回301

可能上面只有这个break 难以理解哈。

给个例子:

location /second{
rewrite /second(.*) /third$1 break;
return 200 'ok';
} location /third{
return 200 'third';
}

如果有这个break,那么将会返回third。

如果没有将会返回ok。

然后还有一个rewritelog 这个默认是关闭的,这个如果开启了,那么就会打印出每一次重定向的日志。

下面结束if:

  1. 检查变量为空或者值是否为0,直接使用

  2. 将变量与字符串做匹配, 使用= 或者!=

  3. 将变量与正则表达式做匹配

    大小写敏感, 或者!

    大小写不敏感,~* 或者 !~*

  4. 检查文件是否存在,使用-f 或者 !~f

  5. 检查目录是否存在,使用-d 或者 !-d

  6. 检查文件、目录、软链接是否存在,使用-e 或者!-e

  7. 检查是否为可执行文件,使用-x 或者!-x

实例:

这一届介绍了11个阶段,同时介绍postread 里面的realip 与 rewrite 阶段里面的 rewrite 模块。下一节介绍find_config 阶段。

nginx重新整理——————http请求的11个阶段[十二]的更多相关文章

  1. 万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段

    Nginx 处理一个 HTTP 请求的全过程 前面给大家讲了 Nginx 是如何处理 HTTP请求头部的,接下来就到了真正处理 HTTP 请求的阶段了.先看下面这张图,这张图是 Nginx 处理 HT ...

  2. nginx系列7:处理HTTP请求的11个阶段

    处理HTTP请求的11个阶段 如下图: 序号 阶段 指令 备注 1 POST_READ realip 获取客户端真实IP 2 SERVER_REWRITE rewrite 3 FIND_CONFIG ...

  3. Nginx处理请求的11个阶段(agentzh的Nginx 教程学习记录)

    Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read.server-rewrite.find-config.rewrite.post-rewrite.preacc ...

  4. nginx处理请求的11个阶段

    Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read.server-rewrite.find-config.rewrite.post-rewrite.preacc ...

  5. Nginx 请求的11个阶段

    48 1:当请求进入Nginx后先READ REQUEST HEADERS 读取头部 然后再分配由哪个指令操作 2:Identity 寻找匹配哪个Location  3:Apply Rate Limi ...

  6. 重新整理 .net core 实践篇————缓存相关[四十二]

    前言 简单整理一下缓存. 正文 缓存是什么? 缓存是计算结果的"临时"存储和重复使用 缓存本质是用空间换取时间 缓存的场景: 计算结果,如:反射对象缓存 请求结果,如:DNS 缓存 ...

  7. nginx&http 第三章 ngx 请求处理的 11 个阶段 --ngx_http_process_request& ngx_http_handler

    ngx_http_process_request如果设置了定时器则删除,既然所有的请求已经接收完毕,就不会再发生超时了 重设连接的读写回调函数 重设请求读事件回调函数 调用 ngx_http_hand ...

  8. 【Nginx】HTTP请求的11个处理阶段

    Nginx将一个HTTP请求分成多个阶段.以模块为单位进行处理.这样做的优点是使处理过程更加灵活.减少耦合度.HTTP框架将处理分成了11个阶段,各个阶段能够包括随意多个HTTP模块并以流水线的方式处 ...

  9. nginx&http 第三章 ngx HTTP 请求的 11 个处理阶段

    nginx 将一个 HTTP 请求分为 11 个处理阶段,这样做让每一个 HTTP 模块可以仅仅专注于完成一个独立.简单的功能,而一个请求的完整处理过程可以由多个 HTTP 模块共同合作完成将一次 H ...

  10. nginx源代码分析--读请求主体(1)

    首先,读取请求体已进入HTTP要求11相,我们需要做的请求正文部分处理一些模块,所以这个模块需要注册功能在这个阶段,在阅读功能要求的身体ngx_http_read_client_request_bod ...

随机推荐

  1. C++ //提高编程 模板(泛型编程 STL) //模板不可以直接使用 它只是一个框架 //模板的通用并不是万能的 //语法 //template<typename T> //函数模板两种方式 //1.自动类型推导 必须推导出一致的数据类型T,才可以使用 //2.显示指定类型 模板必须确定出T的数据类型,才可以使用

    1 //C++提高编程 模板(泛型编程 STL) 2 //模板不可以直接使用 它只是一个框架 3 //模板的通用并不是万能的 4 //语法 5 //template<typename T> ...

  2. SPFA最短路

    目录 从Bellman-Ford开始 核心思想 模拟算法执行过程 时间复杂度 模板 spfa spfa优化的思想 模板 从Bellman-Ford开始 对于所有边权都大于等于0的图,任意两个顶点之间的 ...

  3. 问答:C程序为何for循环和while循环无法相互替代?

    百鸡百钱问题: C代码: include <stdio.h> main() { int cock, hen, chicken; for(cock=0;cock<=20;cock++) ...

  4. 照片也能说话了?嘴型表情全同步,AI数字人时代要来了

    SadTalker是一款先进的人工智能模型,它通过从音频中学习生成3D运动系数,并使用全新的三维面部渲染器来生成头部运动,只需传入一张照片和一段音频,就能生成高质量的AI数字人视频 工作原理 1.显式 ...

  5. 【MongoDB详细步骤】(内附源码)

    第01章-MongoDB 1.安装和启动(docker方式) 1.1.拉取镜像 docker pull mongo:4.4.8 1.2.创建和启动容器 docker run -d --restart= ...

  6. vue中setTimeout之前 一定要 clearTimeout 否则将失效

    window.clearTimeout(this.singleClick) // 这句很重要,否则不起作用 this.singleClick = window.setTimeout(() => ...

  7. springboot打印启动信息

    打印启动信息 转载自:www.javaman.cn 1 spring Bean实例化流程 基本流程: 1.Spring容器在进行初始化时,会将xml或者annotation配置的bean的信息封装成一 ...

  8. gRPC入门学习之旅(二)

    gRPC入门学习之旅(一) gRPC是一个高性能.通用的开源远程过程调用(RPC)框架,基于底层HTTP/2协议标准和协议层Protobuf序列化协议开发,支持众多的开发语言,由Google开源. g ...

  9. 【VR虚拟现实】-医疗行业的具体应用

    虚拟现实 (VR) 虽然经常与游戏联系在一起,但不可否认,未来科技少不了虚拟现实,其应用可以彻底改变许多行业.在医疗领域,无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式,比如 ...

  10. JavaScript知识总结 异步编程篇

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 异步编程的实现方式? JavaScript中的异步机制可以分为以下几种: 回调函数 的方式,使用回调函数的方式有一个缺点是,多个回调 ...