Nginx 同 Apache 和 Lighttpd 等其他 Web 服务器的配置记法不太相同,Nginx的配置文件使用语法的就是一门微型的编程语言。可以类似写程序一般编写配置文件,可操作性很大。既然是编程语言,一般也就少不了“变量”这种东西。

nginx变量简介

所有的 Nginx变量在 Nginx 配置文件中引用时都须带上 $ 前缀
在 Nginx 配置中,变量只能存放一种类型的值,有且也只存在一种类型,那就是字符串类型

创建变量与赋值

使用了标准 ngx_rewrite 模块的 set 配置指令对变量 $a 进行了赋值操作

set $hello "hello world";

Perl的变量插值

这里使用变量方法,直接写在双引号内,perl将检查引号内的每个字符,看看是否有特殊定义, 然后将它替换为其内容,这叫做变量插值
写在单引号内会则是原文不会改变
当然有些语法中不加算引号,直接写内容也是可以的

set $hello "hello world";
print "this is $hello  .";

大括号插值

在“变量插值”的上下文中,还有一种特殊情况,即当引用的变量名之后紧跟着变量名的构成字符时(比如后跟字母、数字以及下划线),我们就需要使用特别的记法(${变量名})来消除歧义

set $hello "hello";
print "this is ${hello}World .";

输出 $ 符

在nginx中 $ 字符给转义是不支持的,但我们可以通过不支持“变量插值”的模块配置指令专门构造出取值为 $ 的 Nginx 变量,然后再在 echo 中使用这个变量。
这里用到了标准模块ngx_geo提供的配置指令geo来为变量 $dollar 赋予字符串 $ ,这样我们在下面需要使用美元符的地方,就直接引用我们的 $dollar 变量就可以了

geo $dollar {default "$";
}server {listen 8080;location /test {echo "This is a dollar sign: $dollar";}
}

变量创建,赋值及作用域问题

变量的创建和赋值操作发生在全然不同的时间阶段。Nginx 变量的创建只能发生在 Nginx 配置加载的时候,或者说 Nginx 启动的时候;而赋值操作则只会发生在请求实际处理的时候。这意味着不创建而直接使用变量会导致启动失败,同时也意味着我们无法在请求处理时动态地创建新的 Nginx 变量。
例:

set $hello "hello";
print "this is ${hello}World .";

如set指令中,nginx启动后是存在变量$hello的,但是只有真正运行到该地方时,变量才赋值了

Nginx 变量一旦创建,其变量名的可见范围就是整个 Nginx 配置,甚至可以跨越不同虚拟主机的 server 配置块
Nginx变量名的可见范围虽然是整个配置,但每个请求都有所有变量的独立副本,或者说都有各变量用来存放值的容器的独立副本,彼此互不干扰
例:

server {listen 8080;location /foo {echo "foo = [$foo]";}location /bar {set $foo 32;echo "foo = [$foo]";}}

结果:

  $ curl 'http://localhost:8080/foo'foo = []$ curl 'http://localhost:8080/bar'foo = [32]$ curl 'http://localhost:8080/foo'foo = []

从这个例子我们可以看到,set 指令因为是在 location /bar 中使用的,所以赋值操作只会在访问 /bar 的请求中执行。而请求 /foo 接口时,我们总是得到空的 $foo 值,因为用户变量未赋值就输出的话,得到的便是空字符串。

Nginx变量值容器的生命期是与当前正在处理的请求绑定的,而与location无关。
有一种方式叫内部跳转,意思是在处理请求的过程中,于服务器内部,从一个 location 跳转到另一个 location 的过程,这时候这些location是共用一套Nginx量的容器副本的
例:

 server {listen 8080;location /foo {set $a hello;echo_exec /bar;}location /bar {echo "a = [$a]";}}

结果

 $ curl localhost:8080/foo
a = [hello]$ curl localhost:8080/bar
a = []

这时候如果访问localhost:8080/foo,就会跳转到/bar,输出结果a = [hello],但是如果直接访问localhost:8080/bar,输出结果则为a = [],因为$a变量没有赋值

简单介绍nginx 变量使用相关推荐

  1. 【CAPL】CAPL的简单介绍及变量

    文章目录 前言 一.CAPL 1.程序结构 2.数据类型 3.常用关键字 4.全局变量与局部变量 5.复合类型 6.其他类型 总结 前言 CAPL(COMMUNICATION Access Progr ...

  2. 简单配置nginx反向代理,实现跨域请求

    简单配置nginx去做反向代理,实现跨域请求 简单介绍nginx的nginx.conf最核心的配置,去做反向代理,实现跨域请求. 更多详细配置,参考nginx官方文档 先介绍几个nginx命令 打开n ...

  3. java自学——java的基本讲解和变量、字符串、运算符的简单介绍

    java自学--java的基本讲解和变量.数组.字符串.运算符的简单介绍 hello world程序 java程序的结构 java语句的组成介绍 关键字 标识符 标识符的命名规则 分隔符 注释符 空白 ...

  4. Weka简单介绍与最新详细简单安装以及环境变量配置

    一.Weka简单介绍 Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化(与之对应的是SPSS公司商业数 ...

  5. linux加protobuf变量环境,protobuf简单介绍和ubuntu 16.04环境下安装教程

    protobuf简单介绍 protobuf是谷歌的开源序列化协议框架,结构类似于XML,JSON这种,显著的特点是二进制的,效率高,主要用于通信协议和数据存储等方面,算是一种结构化数据的表示方法. p ...

  6. Nginx 变量漫谈

    Nginx 变量漫谈之变量插值(一) Nginx 的配置文件使用的就是一门微型的编程语言,许多真实世界里的 Nginx 配置文件其实就是一个一个的小程序.当然,是不是"图灵完全的" ...

  7. openresty开发系列10--openresty的简单介绍及安装

    openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...

  8. docker简单介绍、安装使用、常用命令、docker构建springboot项目、k8s安装

    docker简单介绍 docker的意义 把事情简单化 Docker友好的基于CLI的工作流使各种技能水平的开发人员都可以访问构建,共享和运行容器化应用程序. 快速移动 从单个软件包安装即可在几分钟内 ...

  9. kafka的简单介绍以及docker-compose部署单主机Kafka集群

    Kafka简单介绍 Kafka是由Apache软件基金会开发的一个分布式.分区的.多副本的.多订阅者的开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可 ...

最新文章

  1. CSS布局之-水平垂直居中
  2. JS监听手机物理返回键,返回到指定页面
  3. cassandra集群环境搭建——注意seeds节点,DHT p2p集群管理难道初始化都应如此吗?...
  4. python svm算法smo cifar_使用smo算法编写svm对CIFAR-10数据分类
  5. 计算机视觉结课论文,计算机视觉与图像识别结课论文
  6. 学习java的中文网站_学习java的网站有哪些
  7. linux服务器管理公司用户,Linux服务器用户账号如何管理
  8. 【windows10】 CH340/CH341 USB转串口驱动安装
  9. matlab 图例自定义,matlab实现自定义曲线图以及图例
  10. 大屏布局css,前端大屏项目的屏幕适配方案
  11. 下一代Windows家庭服务器Vail本地化版本发布
  12. Python 负载均衡,数据轮询 hash字符串 hashlib
  13. C++ 匠心之作 从0到1入门学编程
  14. nrm install 安装与使用
  15. 深入理解Linux网络技术内幕(十)——帧的接收
  16. win2003 php5.2.17,win2003下搭建FastCGI+php5.2.17
  17. java三国猛将传关羽_《三国无双之猛将传》三国无双之关羽新手教学贴
  18. Centos 7--pdf2htmlEX安装和配置
  19. 解决mathtype默认使用中文输入法
  20. 近似平面点云一般特征——粗糙度

热门文章

  1. 本、硕、博的区别,只用两组图就解释清楚了
  2. 自然语言处理(nlp)之词袋模型及句子相似度
  3. python 正则表达式 截取特定字符串之后的全部内容
  4. 绝望,上传文件失败。。遇到并解决java.lang.NullPointerException
  5. beautifulsoup关于标签的初学习
  6. 基于关键帧的RGB-D视觉惯性里程计
  7. 可复现的图像降噪算法总结——超赞整理
  8. 目标检测中的特征冲突与不对齐问题
  9. 一文看懂神经网络初始化!
  10. VSLAM系列原创01讲 | 深入理解ORB关键点提取:原理+代码