`
on__the__way
  • 浏览: 23978 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nginx变量

 
阅读更多

    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变量的一个有趣的特性就是nginx中没一个变量都是全局可见的,而他们又不是全局变量。比如下面这个例子 location

    史上最牛逼的Nginx最佳实践教程从入门到精通

    1.Nginx安装 2.nginx编译参数相机 3.nginx安装配置+清缓存模块安装 ...5.nginx配置虚拟主机 6.nginx location配置 ...Nginx变量详解 Nginx模块与实践案例 提供了目前所有互联网公司都在用的51个案例 常见问题

    nginx内置变量

    nginx内置变量文档, 网上收集出来的

    Nginx内置变量列表

    nginx内置变量列表,根据 Nginx 源码文件 ngx_http_variables.c 提取了nginx 的内置变量。

    nginx 内置变量详解及隔离进行简单的拦截

    1,nginx内置变量 nginx 有很多内置变量可以进行简单的过滤。 $arg_name 请求行中的name参数。 $args 请求行中参数字符串。 $cookie_name 名为name的cookie。 与$uri相同。 $http_name 任意请求头的值;变量名的后...

    NGINX conf 配置文件中的变量大全

    一个NGINX conf 配置文件中的变量大全

    nginx 内置变量表 Excel版.rar

    经常需要配置Nginx ,其中有许多以 $ 开头的变量,经常需要查阅nginx 所支持的变量。 可能是对 Ngixn资源不熟悉,干脆就直接读源码,分析出支持的变量。 Nginx支持的http变量实现在 ngx_http_variables.c 的 ngx_...

    docker-jenkins-nginx:在 nginx 服务器后面为 Jenkins 构建 Docker

    传递给带有前缀NGINX_容器的所有可用环境变量NGINX_将在 nginx 服务器配置中可用。 这些允许在运行时动态填充 nginx 配置,因此可以动态修改例如代理端点。 有关如何在运行时传递 env 文件的信息,请参见下面的示例...

    static-content-configuration-nginx:Nginx配置示例在静态内容中使用本机环境变量

    Nginx服务器的静态内容配置 Nginx配置示例在静态内容中使用本机环境变量 ... 然后,您必须指定要将哪些环境变量用作nginx变量: env NGINX_ENV_BACK_URL; 您为每个环境变量定义一个perl变量: pe

    nginx全局变量整理小结

    nginx全局变量整理小结,方便需要的朋友

    Nginx 内置预变量都有哪些?

    Nginx 内置预变量都有哪些?

    ngx_txid:nginx 的 $txid 变量 - 20 个不区分大小写的字符的可排序唯一 ID

    建造使用--add-module=path/to/ngx_txid配置和 nginx例子假设您想以列格式存储日志。 无论您的timer_resolution指令中的调度程序有多准确,即使跨连接,您也需要为每个请求提供一个连接密钥。 剩余的列可以根据记录...

    深入理解Nginx

    接着,综合Nginx框架代码分析了Nginx架构的设计理念和技巧,此外,还新增了如何在模块中支持HTTP变量,以及与slab共享内存等相关的内容,相信通过完善,可进一步帮助读者更好地开发出功能丰富、性能—流的Nginx模块...

    Nginx中全局变量整理小结

    对于Nginx下全局变量整理,方便使用Nginx的朋友调用全局变量。

    nginx利用ctx实现数据共享、修改上下文功能

    环境: init_worker_by_lua, set...这个 Lua 表可以用来存储基于请求的 Lua 环境数据,其生存周期与当前请求相同 (类似 Nginx 变量)。 参考下面例子, location /test { rewrite_by_lua_block { ngx.ctx.foo = 76 }

    实战nginx-张宴

    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...

    可自动按天分割日志的nginx (根据nginx源代码修改得来)

    编译好的可以直接拷贝使用,配置log格式的时候在文件名中加上 $date_udf 变量即可(如:access_log logs/$date_udf.access.log main; 将在 logs目录下生成类似 2014-01-21.access.log 的log文件,这个日期会根据...

    分享最新版 nginx内置变量 大全

    nginx内置变量 内置变量存放在 ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的。总而言之,这些变量代表着客户端请求头的内容,例如$http_user_agent, $http_cookie, 等等。下面是nginx...

    nginx-1.22.1-install.tar.gz,Linux环境编译后免安装Nginx压缩包

    内容概要:该安装包为1.22.1版本的 nginx 源码包...2.使用命令配置环境变量:export PATH=$PATH:/usr/local/nginx/sbin 3.使用命令测试是否配置成功:nginx -v 资源亲测可用,整理不易,还请各位大佬简单打赏一下。

Global site tag (gtag.js) - Google Analytics