博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx连载
阅读量:7189 次
发布时间:2019-06-29

本文共 1463 字,大约阅读时间需要 4 分钟。

一、 nginx变量(用户变量、内建变量)

  用户变量 又称用户自定义变量

  Nginx用户变量的可见范围是整个配置文件,甚至可以跨越不通虚拟主机的server配置,但是变量适用范围是不可以跨越自己的容器的,彼此之间不可以相互使用,如果有夸容器使用的需求可以使用echo_exec命令来实现夸容器跳转与rewrite类似。

  使用set geo 指令不仅仅可以给变量赋值,还可以创建变量,如某个变量不存在它会自动创建,学习下面的实例。

nginx变量可以使用set赋值,我们来看一个比较完整的配置示例

server {        listen 8080;        location /test {            set $foo hello;            echo "foo: $foo";  #变量插值        }    } 

前缀必须带上“$”, 他的定义方式与PHP、Perl类似。

如果我们想通过echo直接输出含有“$”的字符串如何把$字符转义?利用标准模块ngx_geo提供的配置指令geo来为变量$dollar赋予字符串“$”

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

测试结果如下:

    $ curl 'http://localhost/test'     This is a dollar sign: $

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

server {        listen 8080;        location /test {            set $first "hello ";            echo "${first}world";        }    }

 

内建变量

内建变量 又称预定义变量

Nginx内建变量最常用的就是来获取关于请求或响应的各种信息,例如由ngx_http_core模块提供的内建变量$uri 和 $request_uri的值输出到响应体中去。

$uri $request_uri mac自动给我带的转义符,看起来可能比较乱~

location /test {        echo "uri = $uri";        echo "request_uri = $request_uri";        }

 

$arg_xxx

$arg_xxx内建变量是一个随着用户的使用参数变化而变化的,xxx则代表用户传参变量名,举例 $arg_name 这个变量就代表获取url参数为name或Name或NAME等等参数的值,而且还是未解码的原始形式的值,Nginx在匹配参数之前会把所有的参数全部格式化为小写。  

 

location /test {        echo "name = $arg_name";        echo "age = $arg_age";        }

 

 

 

转载于:https://www.cnblogs.com/liuquan/p/9803864.html

你可能感兴趣的文章
BZOJ4123 : [Baltic2015]Hacker
查看>>
蓝牙介绍
查看>>
BZOJ1110 : [POI2007]砝码Odw
查看>>
也谈C#之Json,从Json字符串到类代码
查看>>
javascript事件流机制
查看>>
谈话Java在ThreadLocal理解类
查看>>
随笔2
查看>>
ListView嵌套GridView显示不完整的解决方案
查看>>
创建文件/目录
查看>>
TPS和事务响应时间的关系
查看>>
throw new OAException执行了,却没有正常抛出异常!
查看>>
BZOJ3456 : 城市规划
查看>>
图片懒加载
查看>>
Appium入门示例(Java)
查看>>
Android Studio导入GitHub上的项目常见问题(以图片轮播开源项目为实例)
查看>>
【<td>】使<td>标签内容居上
查看>>
出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path错误
查看>>
Serial Wire Debug (SWD) Interface -- PSoc5
查看>>
jenkins综合cobertura,来电显示cobertura的report
查看>>
将EBS设为首页worklist删除误报
查看>>