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

  • 相关阅读:
    第一次做Java程序注意事项
    数制学习笔记
    1228作业
    1226作业(转为十进制)
    [SDOI2010] 古代猪文 (快速幂+中国剩余定理+欧拉定理+卢卡斯定理) 解题报告
    Miller-Rabin
    STL整理之set
    [HNOI2008] GT考试(DP+矩阵快速幂+KMP)
    [JZOJ4024] [佛山市选2015] 石子游戏 解题报告
    [JZOJ3383] [NOIP2013模拟] 太鼓达人 解题报告(数位欧拉)
  • 原文地址:https://www.cnblogs.com/koushr/p/5873460.html
Copyright © 2011-2022 走看看