nginx重新整理——————http请求的11个阶段[十二]
前言
已经到了关键的http请求的11个阶段了。
正文
概念图:

11 个阶段的处理顺序:

那么就来介绍一下:
先来了解一下postread阶段的realip这个处理,realip 是 real ip,就是获取到连接的真实地址。
如何拿到真实的用户ip地址?
- tcp 连接四元组
这个不可靠,因为网络中可能存在很多的代理。
比如说:

http 头部x-forwareded-for 用于传递ip
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:

检查变量为空或者值是否为0,直接使用
将变量与字符串做匹配, 使用= 或者!=
将变量与正则表达式做匹配
大小写敏感, 或者!
大小写不敏感,~* 或者 !~*检查文件是否存在,使用-f 或者 !~f
检查目录是否存在,使用-d 或者 !-d
检查文件、目录、软链接是否存在,使用-e 或者!-e
检查是否为可执行文件,使用-x 或者!-x
实例:

结
这一届介绍了11个阶段,同时介绍postread 里面的realip 与 rewrite 阶段里面的 rewrite 模块。下一节介绍find_config 阶段。
nginx重新整理——————http请求的11个阶段[十二]的更多相关文章
- 万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段
Nginx 处理一个 HTTP 请求的全过程 前面给大家讲了 Nginx 是如何处理 HTTP请求头部的,接下来就到了真正处理 HTTP 请求的阶段了.先看下面这张图,这张图是 Nginx 处理 HT ...
- nginx系列7:处理HTTP请求的11个阶段
处理HTTP请求的11个阶段 如下图: 序号 阶段 指令 备注 1 POST_READ realip 获取客户端真实IP 2 SERVER_REWRITE rewrite 3 FIND_CONFIG ...
- Nginx处理请求的11个阶段(agentzh的Nginx 教程学习记录)
Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read.server-rewrite.find-config.rewrite.post-rewrite.preacc ...
- nginx处理请求的11个阶段
Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read.server-rewrite.find-config.rewrite.post-rewrite.preacc ...
- Nginx 请求的11个阶段
48 1:当请求进入Nginx后先READ REQUEST HEADERS 读取头部 然后再分配由哪个指令操作 2:Identity 寻找匹配哪个Location 3:Apply Rate Limi ...
- 重新整理 .net core 实践篇————缓存相关[四十二]
前言 简单整理一下缓存. 正文 缓存是什么? 缓存是计算结果的"临时"存储和重复使用 缓存本质是用空间换取时间 缓存的场景: 计算结果,如:反射对象缓存 请求结果,如:DNS 缓存 ...
- nginx&http 第三章 ngx 请求处理的 11 个阶段 --ngx_http_process_request& ngx_http_handler
ngx_http_process_request如果设置了定时器则删除,既然所有的请求已经接收完毕,就不会再发生超时了 重设连接的读写回调函数 重设请求读事件回调函数 调用 ngx_http_hand ...
- 【Nginx】HTTP请求的11个处理阶段
Nginx将一个HTTP请求分成多个阶段.以模块为单位进行处理.这样做的优点是使处理过程更加灵活.减少耦合度.HTTP框架将处理分成了11个阶段,各个阶段能够包括随意多个HTTP模块并以流水线的方式处 ...
- nginx&http 第三章 ngx HTTP 请求的 11 个处理阶段
nginx 将一个 HTTP 请求分为 11 个处理阶段,这样做让每一个 HTTP 模块可以仅仅专注于完成一个独立.简单的功能,而一个请求的完整处理过程可以由多个 HTTP 模块共同合作完成将一次 H ...
- nginx源代码分析--读请求主体(1)
首先,读取请求体已进入HTTP要求11相,我们需要做的请求正文部分处理一些模块,所以这个模块需要注册功能在这个阶段,在阅读功能要求的身体ngx_http_read_client_request_bod ...
随机推荐
- Jmeter参数化-用户自定义变量
一 首先我们先来了解下jmeter 做参数化的目的: 1通过参数化来集中管理配置和测试数据 2通过参数化实现数据驱动测试 二 线程组添加配置元件中的用户自定义变量 添加变量名称,变量值 三 使用变量 ...
- Java 关于继承小练习2
1 package com.bytezero.inherit2; 2 3 4 public class KidsTest 5 { 6 public static void main(String[] ...
- 你想要一个简单的 MQ 吗?(最简单的那种)
FolkMQ 一个简单的消息中间件(全球最简单的那种,要比谁都简单!).追世间简单为何物,可叫我生死相许! 面向简单编程 1) 启动服务 docker run -p 18602:18602 -p 86 ...
- springMvc精简整理
精简共分步 新建一个web工程 导入核心就二包,因为springmvc 包自己有依赖 <?xml version="1.0" encoding="UTF-8&qu ...
- C++串口通讯解决方案
这篇文章只是笔记性质,没有实际的原创内容,主要是做一下方案的备份. 串口通讯使用开源的 CSerialPort 类,我使用的是Windows版本分支: CSerialPort 跨平台 CSerialP ...
- 一个简单的HTTP服务器的实现
我们继续我们的HTTP服务器的实现(使用别的代码来实现), 这个HTTP服务器的实现,我们主要就是关注TCP服务器中的recv还有send的处理. 首先,看一下HTTP,我们在用浏览器访问我们的TCP ...
- day07-JavaScript04
JavaScript04 11.DOM02 11.3HTML-DOM文档说明 11.3.1基本介绍 在HTML DOM(文档对象模型)中,每个部分都是节点: 1)文档本身是文档节点 2)所有HTML元 ...
- Linux查看用户的7个命令
Linux是中国IT实验室的一个技术频道.包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类 在Linux系统里,我们会经常用Linux查看用户的命令,在这里我们一些 ...
- 解决js缓存地址问题
解决js缓存地址问题 js实现不缓存 <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META ...
- Android WifiDisplay分析二:Wifi display连接过程
简介 这一章中我们来看Wifi Display连接过程的建立,包含P2P的部分和RTSP的部分,首先来大致看一下Wifi Display规范相关的东西. HIDC: Human Interface D ...