Nginx变量只有一种字符串类型,变量名前使用$符号来引用变量。但不支持通过转衣服来便是$符号,可使用ngx_geo模块来表示,如:
geo $dollar {
default "$";
},可使用$dollar来表示$。
Nginx的set指令首先在nginx启动加载配置时创建变量,而变量的赋值发生在请求处理的时候。其可见范围为整个Nginx配配置。但注意,Nginx 变量名的可见范围虽然是整个配置,但每个请求都有所有变量的独立副本,或者说都有各变量用来存放值的容器的独立副本,彼此互不干扰。
内部跳转指的是在一个请求过程中从一个location跳转到另外一个的过程,由ngx_echo rewrite引起的。而外部跳转指的是状态码为301和302这样的跳转。在内部跳转中由于是同一个请求因此变量没有变化,即便location发生变化,仍是同一个副本。
Nginx变量分为两种,一种是set等指令创建的变量是用户自定义变量,另一种是Nginx预定义的内建变量,包含请求或响应的各种信息,如$uri回去经过解码不含参数的URI,而$request_uri表示未经解码包含参数的URI。需注意nginx会将参数名转为小写匹配。内建变量没有容器的概念,每次用时都需要nginx去计算得到。$args支持写操作,修改URL参数串。拥有值容器的变量在 Nginx 核心中被称为“被索引的” ;反之,则被称为“未索引的”。像 $arg_XXX 这样具有无数变种的变量群,是“未索引的”。 当读取这样的变量时,其实是它的“取处理程序”在起作用,即实时扫描当前请求的 URL 参数串,提取出变量名所指定的 URL 参数的值。
nginx map模块指令就可以用于定义两个 Nginx 变量之间的映射关系,
map $args $foo {
default 0;
debug 1;
},当 $args 的值等于 debug 的时候,$foo 变量的值就是 1,否则 $foo 的值就为 0。ngx_map 模块认为变量间的映射计算足够昂贵,需要自动将因变量的计算结果缓存下来,这样在当前请求的处理过程中如果再次读取这个因变量,Nginx 就可以直接返回缓存住的结果。ngx_geo模块也会缓存结果。
Nginx中请求分为主请求和子请求。主请求是 HTTP 客户端从 Nginx 外部发起的请求,而子请求是Nginx内部进行的请求,是把主请求拆分为多个更小力度的请求并行或串行的执行。由echo_location触发,子请求智键和主请求的变量都有各自独立的副本,ngx_echo, ngx_lua等也是。而ngx_auth_request触发的子请求与主请求共享变量容器,但会忽略子请求的响应体。
echo_location 第一个参数指定“子请求”的 URI ,第二个参数指定“子请求”的 URL 参数串。但通过$request_method和$request_uri获取的都主作用于主请求,$echo_request_method作用于子请求。
Nginx中变量创见了但未赋值则为不合法,而如果URL参数中没有要获取的参数则为没找到。但由于Nginx中只有一种字符串类型,因此都被转换为空字符串。获取“不合法”的变量在Nginx日志中有提示,而“未找到”没有,如果对该种变量作区分可借助lua中nil类型实现。如:
content_by_lua
'if ngx.var.arg_name == nil then
ngx.say("name: missing")
else
ngx.say("name: [", ngx.var.arg_name, "]")
end
';
当 $arg_name 的值为“没找到”( 或者“不合法”) 时为nil。
相关推荐
总览 nginx可以使用变量简化配置与提高配置的灵活性,所有的变量值都可以通过这种方式引用: ...nginx变量的一个有趣的特性就是nginx中没一个变量都是全局可见的,而他们又不是全局变量。比如下面这个例子 location
1.Nginx安装 2.nginx编译参数相机 3.nginx安装配置+清缓存模块安装 ...5.nginx配置虚拟主机 6.nginx location配置 ...Nginx变量详解 Nginx模块与实践案例 提供了目前所有互联网公司都在用的51个案例 常见问题
nginx内置变量文档, 网上收集出来的
nginx内置变量列表,根据 Nginx 源码文件 ngx_http_variables.c 提取了nginx 的内置变量。
1,nginx内置变量 nginx 有很多内置变量可以进行简单的过滤。 $arg_name 请求行中的name参数。 $args 请求行中参数字符串。 $cookie_name 名为name的cookie。 与$uri相同。 $http_name 任意请求头的值;变量名的后...
一个NGINX conf 配置文件中的变量大全
经常需要配置Nginx ,其中有许多以 $ 开头的变量,经常需要查阅nginx 所支持的变量。 可能是对 Ngixn资源不熟悉,干脆就直接读源码,分析出支持的变量。 Nginx支持的http变量实现在 ngx_http_variables.c 的 ngx_...
传递给带有前缀NGINX_容器的所有可用环境变量NGINX_将在 nginx 服务器配置中可用。 这些允许在运行时动态填充 nginx 配置,因此可以动态修改例如代理端点。 有关如何在运行时传递 env 文件的信息,请参见下面的示例...
Nginx服务器的静态内容配置 Nginx配置示例在静态内容中使用本机环境变量 ... 然后,您必须指定要将哪些环境变量用作nginx变量: env NGINX_ENV_BACK_URL; 您为每个环境变量定义一个perl变量: pe
nginx全局变量整理小结,方便需要的朋友
Nginx 内置预变量都有哪些?
建造使用--add-module=path/to/ngx_txid配置和 nginx例子假设您想以列格式存储日志。 无论您的timer_resolution指令中的调度程序有多准确,即使跨连接,您也需要为每个请求提供一个连接密钥。 剩余的列可以根据记录...
接着,综合Nginx框架代码分析了Nginx架构的设计理念和技巧,此外,还新增了如何在模块中支持HTTP变量,以及与slab共享内存等相关的内容,相信通过完善,可进一步帮助读者更好地开发出功能丰富、性能—流的Nginx模块...
对于Nginx下全局变量整理,方便使用Nginx的朋友调用全局变量。
环境: init_worker_by_lua, set...这个 Lua 表可以用来存储基于请求的 Lua 环境数据,其生存周期与当前请求相同 (类似 Nginx 变量)。 参考下面例子, location /test { rewrite_by_lua_block { ngx.ctx.foo = 76 }
12.2 主模块变量 12.3 事件模块指令 第13章 Nginx的标准HTTP模块 13.1 HTTP的核心模块 13.2 HTTP Upstream模块 13.3 HTTP Access模块 13.4 HTTP Auth Basic模块 13.5 HTTP Autoindex模块 13.6 HTTP Browser模块 13.7...
编译好的可以直接拷贝使用,配置log格式的时候在文件名中加上 $date_udf 变量即可(如:access_log logs/$date_udf.access.log main; 将在 logs目录下生成类似 2014-01-21.access.log 的log文件,这个日期会根据...
nginx内置变量 内置变量存放在 ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的。总而言之,这些变量代表着客户端请求头的内容,例如$http_user_agent, $http_cookie, 等等。下面是nginx...
内容概要:该安装包为1.22.1版本的 nginx 源码包...2.使用命令配置环境变量:export PATH=$PATH:/usr/local/nginx/sbin 3.使用命令测试是否配置成功:nginx -v 资源亲测可用,整理不易,还请各位大佬简单打赏一下。