zoukankan      html  css  js  c++  java
  • nginx基础学习第二篇:nginx内置变量的使用

    ngx_http_core模块提供的内置变量有很多,常见的有

    $uri,用来获取当前请求的uri,不含请求参数。

    $request_uri,用来获取请求最原始的uri,包含请求参数,且未解码。

    $request,获取请求方法(GET或者POST)、$request_uri、HTTP协议版本。

    $args,获取当前请求的参数串(即请求中问号后面的部分,如果有的话),未解码的原始值。$args变量是可以改变的,利用set指令即可 set $args a=1&b=2。需要注意的是,绝大部分的内置变量都不能改变,否则会发生意想不到的错误。

    $arg_xxx(名字以arg_开头的所有的变量),用来获取请求参数的值。比如说$name,用来获取请求参数name的值,且是未解码的原始值。其实$arg_name不仅可以匹配name,还可以匹配NAME,甚至可以匹配Name,也就是说nginx匹配参数时是大小写不敏感的。

    如果想对uri参数值中的%XX这样的编码序列进行解码,可以使用第三方set-misc-nginx-module模块提供的set_unescape_uri配置指令。

    $cookie_xxx(名字以cookie_开头的所有的变量),用来获取cookie值。比如说$cookie_pasession,用来获取cookie中pasession的值,且是未解码的原始值。匹配同样是大小写不敏感

    $http_xxx(名字以http_开头的所有的变量),用来获取请求头的值。比如说$http_user_agent,用来获取User-Agent请求头的值(如果请求头字符串中间有中横线,则变量中用下划线对应即可)。

    $sent_http_xxx(名字以sent_http开头的所有变量),用来获取响应头的值。比如说$sent_http_connection,用来获取Connection响应头的值。$sent_http_content_type,用来获取Content-Type响应头的值(同请求头字符串的匹配一样,如果响应头字符串中间有中横线,变量中也是用下划线对应)

    nginx某location块配置如下:

    location /test {

      echo $uri;

      echo $request_uri;

      echo $request;

      echo $args;

      echo $arg_name;

      set_unescape_uri $decoded_name $arg_name;

      echo $decoded_name;

      echo $cookie_pasession;

      echo $http_user_agent;

      echo $sent_http_connection;

      echo $sent_http_content_type;

    }

    这时如果在地址栏里输入的是xxx/test?name=张三&password=abc123,那么

    $uri的值是/test,

    $request_uri的值是/test?name=%E5%BC%A0%E4%B8%89&passsword=abc123,

    $request的值是GET /test?name=%E5%BC%A0%E4%B8%89&passsword=abc123 HTTP1.1,

    $args的值是name=%E5%BC%A0%E4%B8%89&passsword=abc123 HTTP1.1,

    $arg_name的值是%E5%BC%A0%E4%B8%89

    $decoded_name的值是张三

    $cookie_pasession的值是qweasd123(用postman模拟的请求,并添加cookie,cookie key是pasession,cookie value是qweasd123)

    $http_user_agent的值是Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36(浏览器不一样,具体值可能不一样)

    $sent_http_connection的值是keep-alive

    $sent_http_content_type的值是text/plain; charset=utf-8

    内置变量还有很多很多,可以参考 https://www.cnblogs.com/luyucheng/p/6148242.html

  • 相关阅读:
    深入理解关系型数据库的数据水平切分和垂直切分
    数据库Sharding的基本思想和切分策略
    Mycat 设置全局序列号
    Spring MVC异常统一处理
    spring配置文件中bean标签
    浅析VO、DTO、DO、PO的概念、区别和用处
    CentOS7.0安装Nginx 1.7.4
    大数据的四大特点
    CentOS 7 上安装 redis3.2.3安装与配置
    CentOS7下安装MySQL5.7安装与配置(YUM)
  • 原文地址:https://www.cnblogs.com/koushr/p/5873460.html
Copyright © 2011-2022 走看看