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


    前言

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

  • 相关阅读:
    【2012百度之星资格赛】G:聊天就是Repeat
    使用testNG进行并发性能测试
    关于处理高并发,防止库存超卖的问题
    关于java内存溢出的异常处理
    关于微服务架构
    关于MySQL绿色版的安装
    G点营销看来也不是@z营销的专利啊
    matlab+中文字体设计,有搞头没有? 有搞头
    字王字型系列命名草案
    国外字体设计师也是蛮重视数学的
  • 原文地址:https://www.cnblogs.com/aoximin/p/16217491.html
Copyright © 2020-2023  润新知