网站首页 > 精选教程 正文
在Nginx中变量是一个非常强大的工具。
我们可以在nginx.conf中通过通过变量修改各个模块处理请求的方式,
变量也可以在lua中发挥重大作用。
每个变量可以分为提供变量的模块和使用变量的模块。
提供变量的模块:
相当于是定义变量,及求得变量值的方法(这有点类似读写时间的handler)。
也就是说这里并没有对变量进行解析,因为可能请求都没有来呢。只是定义了规则。
主要方法:
// 文件名 ngx_module.h
static ngx_int_t
ngx_http_core_preconfiguration(ngx_conf_t *cf)
{
return ngx_http_variables_add_core_vars(cf);
}
ngx_int_t
ngx_http_variables_add_core_vars(ngx_conf_t *cf)
{
cmcf->variables_keys->pool = cf->pool;
cmcf->variables_keys->temp_pool = cf->pool;
if (ngx_hash_keys_array_init(cmcf->variables_keys, NGX_HASH_SMALL)
!= NGX_OK)
{
return NGX_ERROR;
}
if (ngx_array_init(&cmcf->prefix_variables, cf->pool, 8,
sizeof(ngx_http_variable_t))
!= NGX_OK)
{
return NGX_ERROR;
}
for (cv = ngx_http_core_variables; cv->name.len; cv++) {
v = ngx_http_add_variable(cf, &cv->name, cv->flags);
if (v == NULL) {
return NGX_ERROR;
}
*v = *cv;
}
return NGX_OK;
}
使用变量的模块:
当请求到来时,运行到了这个模块,可能会根据变量判断返回不同的值。
当用到了变量,就会使用上面定义变量模块里的解析变量的方法来获取变量的值。
再来根据这个值,按照模块本身的逻辑来处理。
变量的特性:
惰性求值:
也就是我们之前说的,使用变量的模块只有在请求接收到的时候,并且在处理http请求11个阶段或过滤模块开始读取这个变量值的时候,才去对这个变量求值。这样会有性能上的提升避免不必要的求值。但是这样也带来了另一个问题。
变量值是随时可能会变化的,比如:limit_rate,每秒可能流量都在变化。对于这种变量只反映使用那一刻的值。
Nginx为了进一步提升变量的性能,还为变量提供了哈希表来存储变量。
猜你喜欢
- 2024-09-27 「Nginx」Web/代理服务器的瑞士军刀:重写与定位
- 2024-09-27 Nginx学习笔记(13) nginx变量分类
- 2024-09-27 Nginx的rewrite之set指令 nginx rewrite $1
- 2024-09-27 为多个PHP-FPM容器量身打造单一Nginx镜像
- 2024-09-27 nginx基于时间跳转到维护页面 nginx设置超时时间
- 2024-09-27 细述:nginx http内核模块提供的变量和解释
- 2024-09-27 HTTPS 下使用WebSocket的一些实践
- 2024-09-27 nginx解码特殊字符引发400问题处理案例分享
- 2024-09-27 Apache APISIX如何成为全球最活跃云原生API网关?
- 2024-09-27 ansible笔记(14):变量(一) ansible 变量赋值
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)