首页 » 网站建设 » nginx设置php变量技巧_系统架构Nginx调优之变量的运用2

nginx设置php变量技巧_系统架构Nginx调优之变量的运用2

访客 2024-11-18 0

扫一扫用手机浏览

文章目录 [+]

根据上一篇文章「系统架构」Nginx调优之变量的利用(1)中的描述,相信大家已经大致理解了Nginx中的变量,知道了可以利用“$”符号作为前缀来表示一个变量,也知道了可以将定义好的变量直接作为字符串的一部分插入字符串中等。
但是你们知道在Nginx中有哪些内置变量吗?知道如何定义一个变量才是合法吗?ok,下面我们来详细先容此部分内容。

表示变量的有效字符

在大部分编程措辞中并不是所有的字符都可以用来表示变量名,一样平常会有一个范围限定,如在PHP中,变量只能包含字母、数字、下划线,而且数字不能变量的开始。
nginx对表示变量名的字符也是有规定的,nginx中仅许可四种类型的字符或他们的组合做为变量名,分别是大写字母(A-Z)、小写字母(a-z)、数字(0-9)、下划线(_),其它都是非法的。

nginx设置php变量技巧_系统架构Nginx调优之变量的运用2

内置变量和自定义变量

在nginx中,变量在利用之前是须要预先定义的。
在有些措辞中当你利用了未定义的变量后可能是编译无法通过,而在nginx则会导致nginx无法正常启动。

nginx设置php变量技巧_系统架构Nginx调优之变量的运用2
(图片来自网络侵删)

在nginx中变量的定义分了两种:一种是自定义变量,便是上面用set指令设置的变量,它会在配置文件中明确指出这是一个被定义的变量。
其余是内置变量,它在nginx启动之前就已经被设置好了,不须要在配置文件中明确定义。

须要把稳,并不是说自定义变量就一定要利用set指令,nginx中可以自定义变量的模块有很多,之以是一贯在用set指令讲解变量,是由于我希望读者把更多的把稳里放到变量本身上来,只管即便避免为相识释一个问题而又引入其它额外的问题。
比如,我们下面要用到的ngx_geo模块,这便是nginx的自带的一个标准模块,该模块只包含一个指令geo,浸染是根据客户端ip来定义一个变量。

http { geo $a { default “我是geo默认值”; 127.0.0.1 “客户端ip是127.0.0.1”; } location / { return 200 “$a”; }}

我们用curl访问以下这个资源看看效果:

curl http://127.0.0.1/客户端ip是127.0.0.1

可以看到变量$a的值变成了geo指令中设定的值。

同样是定义变量,geo指令跟set指令且有很大的不同。
比如,指令的放置位置,set指令可以放在location块中,而geo指令则只能放在http块中。

其余一个显著的不同是,set指令定义的变量值是一个字符串形式,而geo定义的变量值则须要利用花括号括起来,并且该指令内部还隐含的做了逻辑判断。
比如如果客户端ip地址是127.0.0.1,则该变量值是“客户端ip是127.0.0.1”,如果不是,则便是默认值“我是geo默认值”。

默认情形下geo指令会自己获取客户真个ip,然后根据相应的配置去映射变量,但实在它也可以吸收一个指定ip,比如下面的例子:

geo $arg_name $a { default “我是geo默认值”; 127.0.0.1 “我是张三”; 192.168.1.1 “我是李四”;}location / { return 200 “$a”;}

验证一下看看效果:

curl http://127.0.0.1/?name=127.0.0.1我是张三curl http://127.0.0.1/?name=192.168.1.1我是李四

把入参name去掉再看看效果:

curl http://127.0.0.1/我是geo默认值

这里既然用到ngx_geo模块,那我们就回过分来在看看之条件到的变量插入的问题,之前说过并不是所有的模块都支持变量插入的,ngx_geo便是这样一个模块。
在geo指令中的花括号中是没有变量这一说的,在geo的花括号中放入的变量只会原样展示,比如下面的例子:

geo $a { default “我是geo默认值 $arg_name”; 127.0.0.1 “我是张三 $arg_name”;}location / { return 200 “$a”;}

当你试图用一个带着name参数的要求访问这个locaiton的时候,它会把花括号中对应的值原样输出:

curl http://127.0.0.1我是张三$arg_name

除了自定义变量,nginx中的另一种变量便是内置变量了,内置变量在nginx启动之前就已经被设置好了,不须要在配置文件中明确定义。

来看一个内置变量的例子:

location /{    return200 “$uri”}

按照我们目前的知识,基于上面的配置nginx该当无法启动才对,由于在配置文件中我们没有对变量“$uri”做定义,但事实上它不但可以启动成功,而且还可以很好的事情,用curl检测一下:

curl http://127.0.0.1/abc

打印结果如下:

/abc

这实在便是由于变量“$uri”是一个内置变量,他在nginx内部已经提前定义好了。

其余,内置变量也是分模块的,每个模块都可以有自己的内置变量。
比如,$uri这个内置变量就属于ngx_http_core这个http核心模块中的变量。
关于这个模块的其它内置变量,读者可以关注nginx的官方文档: http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

标签:

相关文章

PHP实现文字转图片的代码与应用

图片处理技术在各个领域得到了广泛应用。在PHP编程中,文字转图片功能同样具有很高的实用价值。本文将针对PHP实现文字转图片的代码进...

网站建设 2025-03-02 阅读1 评论0

NAN0017探索新型纳米材料的奥秘与应用

纳米技术作为一门新兴的交叉学科,近年来在材料科学、生物医学、电子工程等领域取得了举世瞩目的成果。其中,NAN0017作为一种新型纳...

网站建设 2025-03-02 阅读3 评论0

L26368XO代码其背后的创新与突破

编程语言在各个领域发挥着越来越重要的作用。在众多编程语言中,L26368XO代码以其独特的优势,成为了业界关注的焦点。本文将深入剖...

网站建设 2025-03-02 阅读1 评论0

HTML字体背景打造个化网页设计的关键元素

网页设计已经成为现代网络传播的重要手段。在众多网页设计元素中,字体和背景的搭配尤为关键。本文将从HTML字体背景设置的角度,探讨其...

网站建设 2025-03-02 阅读1 评论0