ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

nginx重新整理——————http请求的11个阶段[十二]

2022-05-03 11:36:41  阅读:156  来源: 互联网

标签:11 http rewrite -- ip break 重新整理 location return


前言

已经到了关键的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 阶段。

标签:11,http,rewrite,--,ip,break,重新整理,location,return
来源: https://www.cnblogs.com/aoximin/p/16217491.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有