nginx自定义变量与内置预定义变量的使用

总览

nginx可以使用变量简化配置与提高配置的灵活性,所有的变量值都可以通过这种方式引用:

$变量名

而nginx中的变量分为两种,自定义变量与内置预定义变量

内置变量

声明

可以在sever,http,location等标签中使用set命令(非唯一)声明变量,语法如下

set $变量名 变量值

注意nginx中的变量必须都以$开头。

可见性

nginx的配置文件中所有使用的变量都必须是声明过的,否则nginx会无法启动并打印相关异常日志

nginx变量的一个有趣的特性就是nginx中没一个变量都是全局可见的,而他们又不是全局变量。比如下面这个例子

location a/ {
 return 200 $a
}

location b/ {
 set $a hello nginx
 return 200 $a
}

由于变量是全局可见的所以nginx启动不会报错,而第一个location中并不知道$a的具体值因此返回的响应结果为一个空字符串。

在不同层级的标签中声明的变量性的可见性规则如下:

  • location标签中声明的变量中对这个location块可见
  • server标签中声明的变量对server块以及server块中的所有子块可见
  • http标签中声明的变量对http块以及http块中的所有子块可见

内置预定义变量

内置预定义变量即无需声明就可以使用的变量,通常包括一个http请求或响应中一部分内容的值,以下为一些常用的内置预定义变量

变量名 定义
$arg_PARAMETER GET请求中变量名PARAMETER参数的值。
$args 这个变量等于GET请求中的参数。例如,foo=123&bar=blahblah;这个变量只可以被修改
$binary_remote_addr 二进制码形式的客户端地址。
$body_bytes_sent 传送页面的字节数
$content_length 请求头中的Content-length字段。
$content_type 请求头中的Content-Type字段。
$cookie_COOKIE cookie COOKIE的值。
$document_root 当前请求在root指令中指定的值。
$document_uri 与$uri相同。
$host 请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称(处理请求的server的server_name指令的值)。值为小写,不包含端口。
$hostname 机器名使用 gethostname系统调用的值
$http_HEADER HTTP请求头中的内容,HEADER为HTTP请求中的内容转为小写,-变为_(破折号变为下划线),例如:$http_user_agent(Uaer-Agent的值);
$sent_http_HEADER HTTP响应头中的内容,HEADER为HTTP响应中的内容转为小写,-变为_(破折号变为下划线),例如: $sent_http_cache_control, $sent_http_content_type…;
$is_args 如果$args设置,值为"?",否则为""。
$limit_rate 这个变量可以限制连接速率。
$nginx_version 当前运行的nginx版本号。
$query_string 与$args相同。
$remote_addr 客户端的IP地址。
$remote_port 客户端的端口。
$remote_user 已经经过Auth Basic Module验证的用户名。
$request_filename 当前连接请求的文件路径,由root或alias指令与URI请求生成。
$request_body 这个变量(0.7.58+)包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义。
$request_body_file 客户端请求主体信息的临时文件名。
$request_completion 如果请求成功,设为"OK";如果请求未完成或者不是一系列请求中最后一部分则设为空。
$request_method 这个变量是客户端请求的动作,通常为GET或POST。包括0.8.20及之前的版本中,这个变量总为main request中的动作,如果当前请求是一个子请求,并不使用这个当前请求的动作。
$request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。
$scheme 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr 服务器地址,在完成一次系统调用后可以确定这个值,如果要绕开系统调用,则必须在listen中指定地址并且使用bind参数。
$server_name 服务器名称。
$server_port 请求到达服务器的端口号。
$server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$uri 请求中的当前URI(不带请求参数,参数位于args),不同于浏览器传递的args),不同于浏览器传递的args),不同于浏览器传递的request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html

到此这篇关于nginx自定义变量与内置预定义变量的使用的文章就介绍到这了,更多相关nginx自定义变量与内置预定义变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • nginx全局变量整理小结

    $args 此变量与请求行中的参数相等 $content_length 等于请求行的"Content_Length"的值. $content_type 等同与请求头部的"Content_Type"的值 $document_root 等同于当前请求的root指令指定的值 $document_uri 与$uri一样 $host 与请求头部中"Host"行指定的值或是request到达的server的名字(没有Host行)一样 $limit_rate

  • 分享最新版 nginx内置变量 大全

    nginx内置变量 内置变量存放在  ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_user_agent, $http_cookie, 等等.下面是nginx支持的所有内置变量: $arg_name 请求中的的参数名,即"?"后面的arg_name=arg_value形式的arg_name $args 请求中的参数值 $binary_remote_addr 客户端地址的二进

  • 浅析Nginx配置文件中的变量的编写使用

    nginx 的配置文件使用的就是一门微型的编程语言,许多真实世界里的 Nginx 配置文件其实就是一个一个的小程序.当然,是不是"图灵完全的"暂且不论,至少据我观察,它在设计上受 Perl 和 Bourne shell 这两种语言的影响很大.在这一点上,相比 Apache 和 Lighttpd 等其他 Web 服务器的配置记法,不能不说算是 Nginx 的一大特色了.既然是编程语言,一般也就少不了"变量"这种东西(当然,Haskell 这样奇怪的函数式语言除外了).

  • nginx 内置变量详解及隔离进行简单的拦截

    1,nginx内置变量 nginx 有很多内置变量可以进行简单的过滤. $arg_name 请求行中的name参数. $args 请求行中参数字符串. $cookie_name 名为name的cookie. 与$uri相同. $http_name 任意请求头的值:变量名的后半部为转化为小写并且用下划线替代横线后的请求头名称. $host "Host"请求头的值,如果没有该请求头,则为与请求对应的虚拟主机的首要主机名. $query_string 与$args相同. $realpath_

  • Nginx中全局变量整理小结

    Variables The core module supports built-in variables, whose names correspond with the names of variables in Apache. First of all, there are the variables, which represent the lines of the title of the client request, for example, $http_user_agent, $

  • nginx自定义变量与内置预定义变量的使用

    总览 nginx可以使用变量简化配置与提高配置的灵活性,所有的变量值都可以通过这种方式引用: $变量名 而nginx中的变量分为两种,自定义变量与内置预定义变量 内置变量 声明 可以在sever,http,location等标签中使用set命令(非唯一)声明变量,语法如下 set $变量名 变量值 注意nginx中的变量必须都以$开头. 可见性 nginx的配置文件中所有使用的变量都必须是声明过的,否则nginx会无法启动并打印相关异常日志 nginx变量的一个有趣的特性就是nginx中没一个变

  • PHP 预定义变量、魔术常量和魔术方法功能与用法小结

    本文总结了PHP 预定义变量.魔术常量和魔术方法.分享给大家供大家参考,具体如下: PHP 预定义了一些变量.常量.方法,使用起来很方便,例如直接使用 __DIR__ 获取当前文件所在的目录. 下面分别详细介绍一下 PHP 的预定义变量.魔术常量和魔术方法 预定义变量 超全局变量: 超全局变量是在全部作用域中始终可用的内置变量,意味这你可以在 PHP 脚本的任意位置直接访问.在函数或方法中无需执行 global $variable; 就可以访问它们. 超全局变量是从 PHP 4.1.0 开始才有

  • 十二、脚本元素、指令和预定义变量

    12.1 JSP脚本元素 JSP脚本元素用来插入Java代码,这些Java代码将出现在由当前JSP页面生成的Servlet中.脚本元素有三种格式: 表达式格式<%= expression %>:计算表达式并输出其结果. Scriptlet格式<% code %>:把代码插入到Servlet的service方法. 声明格式<%! code %>:把声明加入到Servlet类(在任何方法之外). 下面我们详细说明它们的用法. 12.1.1 JSP表达式 JSP表达式用来把J

  • PHP学习之预定义变量(实例讲解)

    超全局变量 超全局变量–超全局变量是全部作用域中始终可用的内置变量 $GLOBALS 一个包含了全部变量的全局组合数组.变量的名字就是数组的键. <?php function test() { $foo = "local variable"; echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n"; echo '$foo in current scope: ' . $foo . &quo

  • VSCode下.json文件的编写之(1) linux/g++ (2).json中参数与预定义变量的意义解释

    0 引言 转入linux/VSCode编程之后,迫切了解到有必有较为系统地学习一下VSCode中相关配置文件的写法.下面将分为 linux/g++编译指令..json文件关键词/替换变量的意义.编译链接过程原理分析几个部分进行介绍,并以opencv为例,将上述知识综合运用. 1 linux/g++编译指令介绍 参照BattleScars的博客,摘取其中对本文有用的部分进行运用,博客链接如下,质量非常之高,表示感谢!!! https://www.jb51.net/article/183540.ht

  • php中常用的预定义变量小结

    复制代码 代码如下: <?php echo "当前操作系统信息".PHP_OS."<br/>"; echo '本文件路径和文件名为:'.__FILE__.'<br />'; echo "当前PHP版本信息".PHP_VERSION."<br/>"; ?> 常用的php预定义变量! 前面的$_SERVER[PHP_SELF]返回的是一段信息,如"/upload/try.p

  • php几个预定义变量$_SERVER用法小结

    本文实例总结了php几个预定义变量$_SERVER的用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php echo 'documentroot:'.$_SERVER['DOCUMENT_ROOT'].'<br>'; //根目录,在apache的配置文件里定义:httpd.conf 比如:DocumentRoot "D:/work/php_root" echo 'httphost:'.$_SERVER['HTTP_HOST'].'<br>

  • php预定义变量使用帮助(带实例)

    自 php 4.1.0 起,取得外部变量的首选方法是用下面提及的超全局变量.在此之前,人们要么依赖 register_globals,要么就是长长的预定义 PHP 数组($HTTP_*_VARS).自 PHP 5.0.0 起,长格式的 PHP 预定义变量可以通过设置 register_long_arrays 来屏蔽.服务器变量:$_SERVER注: 在 PHP 4.1.0 及以后版本使用.之前的版本,使用 $HTTP_SERVER_VARS.$_SERVER 是一个包含诸如头信息(header)

  • shell 脚本中常用的内置变量(Bash 内置变量)

    $FUNCNAME.$LINENO.$PWD FUNCNAME和LINENO 变量经常用于脚本的调试 FUNCNAME 表示当前函数的名字,作用范围仅限函数中使用,在函数外无值 LINENO 表示当前所在脚本中变量出现在的行号 PWD 表示当前目录, 对应于 pwd命令 现有个脚本 a.sh 内容如下 #!/bin/bash testa() { echo 'func='$FUNCNAME,$LINENO } testa echo 'lineno:'$LINENO echo 'xx:'$FUNCN

  • PHP预定义变量9大超全局数组用法详解

    1.$_SERVER $_SERVER超级全局变量包含由web服务器创建的信息,它提供了服务器和客户配置及当前请求环境的有关信息.根据服务器不同,$_SERVER中的变量值和变量个数会有差别,不过一般都可以找到CGI1.1规范中定义的变量.其中包括: $_SERVER['HTTP_REFERER']; 引导用户到达当前位置的页面的URL : $_SERVER['REMOTE_ADDR']; 客户IP地址 : $_SERVER['REQUEST_URI']; URL的路径部分.如果URL是 [ur

随机推荐