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

nginx基础学习第二篇:nginx内置变量的使用的更多相关文章

  1. nginx之旅(第二篇):nginx日志管理、nginx防盗链、nginx虚拟主机

    一.nginx日志管理 Nginx访问日志主要有两个参数控制 1) log_format #用来定义记录日志的格式(可以定义多种日志格式,取不不同名字即可) log_format log_name s ...

  2. JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

    什么是JSP内置对象 JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用.JSP技术的设计者为便于开发人员在编写JSP页面时获得这些w ...

  3. Android基础学习第二篇—Activity

    写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...

  4. 二、JavaScript语言--JS基础--JavaScript进阶篇--JavaScript内置对象

    1.什么事对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方 ...

  5. 【nginx】nginx配置文件结构,内置变量及参数调优

    Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...

  6. nginx 内置变量

    http://blog.sina.com.cn/s/articlelist_1834459124_1_1.html  nginx内置变量杂谈 http://nginx.org/en/docs/http ...

  7. nginx内置变量详解-乾颐堂

    nginx的配置文件中可以使用的内置变量以美元符$开始,也有人叫全局变量.其中,部分预定义的变量的值是可以改变的. $arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数 ...

  8. Nginx基础学习

    参考博客: http://www.2cto.com/os/201212/176520.html http://os.51cto.com/art/201111/304611.htm http://www ...

  9. nginx内置变量 大全

    nginx内置变量 内置变量存放在  ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_u ...

随机推荐

  1. java TimeZone类

    TimeZone类主要是对时区的操作 下面是一个简单的例子 public static void main(String[] args) { // TODO Auto-generated method ...

  2. Why won't JRockit find my classes

    This is the second post by Mattis, diving deep into JVM specifics. NoClassDefFoundErrors are a drag. ...

  3. 关于validate的自定义样式

    $("#Form").validate({ rules: { name: "required" }, messages: { name: "请输入您的 ...

  4. 基于 Web 的数据挖掘--自动抽取用 HTML、XML 和 Java 编写的信息

    简介: 不可否认,万维网是到目前为止世界上最丰富和最密集的信息来源.但是,它的结构使它很难用系统的方法来利用信息.本文描述的方法和工具将使那些熟悉 Web 最常用技术的开发人员能快速而便捷地获取他们所 ...

  5. mysql连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    现象:客户端连接服务器端mysql是没问题的,所有都木有问题,应用程序配置也没问题,但是连接就抛异常: com.mysql.jdbc.exceptions.jdbc4.CommunicationsEx ...

  6. 用Java实现多线程服务器程序

    一.Java中的服务器程序与多线程 在Java之前,没有一种主流编程语言能够提供对高级网络编程的固有支持.在其他语言环境中,实现网络程序往往需要深入依赖于操作平台的网络API的技术中去,而Java提供 ...

  7. android的样式(style)与主题(theme)

    Android上的Style分为了两个方面: 1,Theme是针对窗体级别的,改变窗体样式: 2,Style是针对窗体元素级别的,改变指定控件或者Layout的样式. Android系统的themes ...

  8. border使用小技巧

    border-style 分类 dashed虚线类型 dotted 点线类型 double 双线类型 双线型量根实线的宽度和中间空白区域的间距有一定规律: 可以利用这个规律画出一些特殊的图案 代码如下 ...

  9. Mysql链接字符串问题

    <add key="ConnstringMySql" value="server=xxx.xxx.xxx.xxx;database=YourDatabase;uid ...

  10. hihocoder1634 Puzzle Game

    题目链接:(vjudge) 戳我 和上面那个matrix 比较像. 大概题意就是给你一个n*m的矩阵,然后可以选择其中一个数字进行修改(当然也可以不修改),使得矩阵的最大子矩阵尽可能小.最后输出这个值 ...