【Nginx 变量】【nginx添加模块】

Nginx 变量

Nginx 同 Apache 等其他 Web 服务器的配置记法不太相同,Nginx的配置文件使用语法的就是一门微型的编程语言。可以类似写程序一般编写配置文件,可操作性很大。既然是编程语言,一般也就少不了“变量”这种概念。

1、Nginx变量简介
  • 所有的 Nginx变量在 Nginx 配置文件中引用时都须带上 $ 前缀

  • 在 Nginx 配置中,变量只能存放一种类型的值,有且也只存在一种类型,那就是字符串类型

  • nginx可以使用变量简化配置与提高配置的灵活性,所有的变量值都可以通过这种方式引用:

    $变量名
    
2、Nginx 变量的定义和使用

nginx中的变量分为两种,自定义变量与内置预定义变量

1、自定义变量

1、声明变量
可以在sever,http,location等标签中使用set命令(非唯一)声明变量,语法如下

set $变量名 变量值

注意:

  • nginx 中的变量必须都以$开头
  • nginx 的配置文件中所有使用的变量都必须是声明过的,否则 nginx 会无法启动并打印相关异常日志

2、变量的可见性

在不同层级的标签中声明的变量性的可见性规则如下:

  • location标签中声明的变量中对这个location块可见
  • server标签中声明的变量对server块以及server块中的所有子块可见
  • http标签中声明的变量对http块以及http块中的所有子块可见

nginx安装echo模块

方法;# nginx -V 查看已经安装的nginx的版本

方法;# wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz 下载echo模块的安装包

方法;# ls 查看安装包
v0.61.tar.gz

方法;# tar xzf v0.61.tar.gz -C /usr/local/ 解压到相同路径下:

方法;cd /usr/local/ 查看一下模块的名字
方法:cd nginx-1.2.0/ 进入nginx 先查看上面的编译都有什么

方法;–add-module=/usr/local/echo-nginx-module-0.61 重点是添加 这个模块;

./configure  --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --add-module=/usr/local/echo-nginx-module-0.61

在这里插入图片描述
重点 重点 重点 重点 重点

 make   #编译,不要make install 否则会覆盖原来的文件

方法; mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak2 #将原来的nignx备份

方法;# cp objs/nginx /usr/local/nginx/sbin/ 拷贝nignx

方法;# /usr/local/nginx/sbin/nginx #启动

方法; nginx -V 查看模块是否添加成功
在这里插入图片描述

配置变量

我这里创建了一个子文件

server {
        listen 80;
        server_name     localhost;
        location /test { 
                set $foo 42;
                echo "666 $foo";
        }       
}

在这里插入图片描述
测试 curl 196.196.196.131/test
在这里插入图片描述
5、 使用大括号插值
大括号 跟 空格的区别就是,打印出来一个有空格 一个紧挨着
在“变量插值”的上下文中,还有一种特殊情况,即当引用的变量名之后紧跟着变量名的构成字符时(比如后跟字母、数字以及下划线),我们就需要使用特别的记法来消除歧义,例如:

server {
        listen 80;
        server_name     localhost;
        location /test-brace {
                set $first "hello ";
                echo "${first}world";
        }
}
或者
server {
        listen 80;
        server_name     localhost;
        location /test-brace {
                set $first "hello";
                echo "$first world";
        }
}

在这里插入图片描述

6、变量作用域

我自己总结的是
只能放在server块,还有location块
放在 server块 他就会被这个server块里面的 location都可以使用
放在location块 他就只能单独被他自己所使用

set 指令不仅有赋值的功能,它还有创建 Nginx 变量的作用,即当作为赋值对象的变量尚不存在时,它会自动创建该变量。如果我们不创建就直接使用它的值,则会报错。
例如

server {
    ...
    location /bad {
        echo $foo;
    }
}

此时 Nginx 服务器会拒绝加载配置:
方法;# nginx -s reload
nginx: [emerg] unknown “foo” variable
nginx: configuration file /etc/nginx/nginx.conf test failed

内置预定义变量

内置预定义变量即无需声明就可以使用的变量,通常包括一个http请求或响应中一部分内容的值,以下为一些常用的内置预定义变量
在这里插入图片描述
1、uri vs request_uri

总结下来就是
uri 他会显示 真是地址 不会显示所赋予的值
request_uri 他会显示所有地址 还有赋予的值

server {
        listen 80;
        server_name     localhost;
        location /test-uri {
                echo "uri = $uri";
                echo "request_uri = $request_uri";
        }
}

测试查看
方法;# curl 196.196.196.131/test-uri
uri = /test-uri
request_uri = /test-uri
方法;’# curl “196.196.196.131/test-uri?a=3&b=4”
uri = /test-uri
request_uri = /test-uri?a=3&b=4
在这里插入图片描述
3、$arg_XXX 不区分大小写
我自己的理解就是,可以在外面把值传输到里面
另一个特别常用的内建变量其实并不是单独一个变量,而是有无限多变种的一群变量,即名字以 arg_ 开头的所有变量,我们估且称之为 arg_XXX 变量群。
一个例子是 arg_name,这个变量的值是当前请求中名为 name 的参数的值,而且还是未解码的原始形式的值。

server {
        listen 80;
        server_name     localhost;
        location /test-arg {
        echo "$arg_name";
        echo "$arg_class";
        }
}

在这里插入图片描述
输出测试
curl “196.196.196.131/test-arg?name=ming&class=qing”
在这里插入图片描述
3、$arg_XXX 不区分大小写

其实 $arg_name 不仅可以匹配 name 参数,也可以匹配 NAME 参数,抑或是 Name,Nginx 会在匹配参数名之前,自动把原始请求中的参数名调整为全部小写的形式。
测试
curl “196.196.196.131/test-arg?NAME=ming&CLASS=qing”
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值