Nginx系列-9 set和变量和if指令

1.set和变量

1.1 set用法

nginx配置文件中可以使用变量提取公共部分的配置。

变量只有一种类型,即字符串。在声明和使用变量的地方都需要加上$前缀,变量一旦声明,在整个nginx配置文件中都生效。如下所示:

shell 复制代码
server {
    server_name localhost;
    listen 8001;
    
    set $seong ewen;
    location /query {
        return 200 "hello $seong world";
    }
}

测试结果如下所示:

shell 复制代码
[root@host44 conf]# curl http://localhost:8001/query
hello ewen world

#如果使用变量前没有定义,会抛出异常,如下所示:
nginx: [emerg] unknown "seong" variable

1.2 预置变量

Nginx中预置了很多可以直接使用的变量,以下对常用变量进行介绍。

说明:Nginx提供的变量相对于每个请求而言,即每个请求对应不同的副本,类似于平行空间。

python 复制代码
#1.url与协议相关
$request_uri 客户端请求URI, 带完整的参数
$uri 客户端请求URI, 不带任何参数
$request_method HTTP请求的方法名, 如 GET、POST等

#2.地址和端口相关
$remote_addr 客户端的地址
$remote_port 客户端的端口

$server_addr 服务器地址
$server_port 服务器端口
    
#3.请求头
$content_length 客户端请求头的Content-Length 字段
$content_type 表示客户端请求头的Content-Type 字段
$cookie_COOKIE 表示在客户端请求头的cookie 字段
$host 表示客户端请求头的Host字段

#4.请求参数相关
$args 客户端请求中的完整参数。 例如, 在请求/query?id=400&name=seong 中, $args表示字符串id=400&name=seong.
$arg_PARAMETER HTTP 请求中某个参数的值, 如/query?id=400&name=seong, 可以用$arg_name取得seong这个值
$query_string 请求URI中的参数,与$args相同,区别是只读

2.if指令

可以在server块或者location块中使用if指令。语法为:

shell 复制代码
if (condition) {

}

该指令用于检测条件是否符合,符合则执行大括号内指令。

说明: if指令不支持多个条件的"与"/或"处理, 不支持else和else if语法,不支持嵌套

condition中一般进行字符串的匹配以及文件是否存在等判断,以下对常见用法进行整理:

1 = 表示字符串是否相等;

2 ~ 和 ~* 表示字符串的正则表达式匹配,后者不区分大小写;

3 -f 文件是否存在;-d 目录是否存在;-e 文件或目录是否存在;

另外,可通过添加!进行逻辑取反。

案例如下:

shell 复制代码
server {
    server_name remote44;
    listen 8001;
    set $seong ewen;
    location /query {
       if ($arg_name = "seong") {
           return 200 "hello $seong world";
       }
        return 200 "hello world";
    }
}

测试结果如下所示:

shell 复制代码
[root@124 conf]# curl http://localhost:8001/query?name=seong
hello ewen world

[root@124 conf]# curl http://localhost:8001/query
hello world
相关推荐
IT大白鼠11 分钟前
AI SSH 运维助手 V13.0内部版七项私有新特性全解
运维·人工智能·ssh
天蓝蓝的本我27 分钟前
ollama外部无法访问.ollama.service 文件无法写入.ollama外部无法访问.
运维·网络
帷幕落秋36 分钟前
经典命令场景与软硬链接
linux·运维
Sayai2 小时前
Java 进程 Unable to create new native thread 排查实战:Linux 线程数五层限制与 JVM -Xss 调优
java·linux·运维·jvm·性能优化
修船大队长2 小时前
启动阶段 KL15 未接通时触发报文超时监控
运维·服务器·网络
程序员-Benothing2 小时前
Linux网络排错命令:ping、traceroute、mtr、dig、nslookup
linux·运维·网络
AbandonForce3 小时前
Linux 网络:序列化与反序列化
linux·运维·网络