JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Nginx之强大变量运行的原理 nginx proxy_pass 变量

wys521 2024-09-27 13:54:00 精选教程 14 ℃ 0 评论

在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为了进一步提升变量的性能,还为变量提供了哈希表来存储变量。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表