编程技术分享平台

网站首页 > 技术教程 正文

nginx入门——预定义变量和自定义变量(五)

xnh888 2024-09-14 15:18:13 技术教程 43 ℃ 0 评论

一、预定义变量

由于在不同模块下存在相同名称的变量,我们只列出一些与http相关的变量。

$host “Host”请求header字段中的主机名

$pid worker进程的PID

$remote_addr 客户端的IP地址

$request 完整的原始请求行

$scheme 当前请求的协议,http或者https

$status 响应状态

$uri 请求中的当前URI

更多预定义变量可访问https://nginx.org/网站查看。

二、自定义变量

  • set指令

为指定的变量设置一个值。该值可以包含文本、变量及其组合。

适用server, location, if上下文

示例:

set $flag ---;

示例配置解析:

设置$flag变量的值为---。

  • map指令

创建一个新变量,其值取决于第一个参数中指定的一个或多个源变量的值。

适用http上下文

示例:

map $http_host $name {
    hostnames;

    default       0;

    example.com   1;
    *.example.com 1;
    example.org   2;
    *.example.org 2;
    .example.net  3;
    wap.*         4;
}

示例配置解析:

$http_host为系统预定义变量,变量值为用户访问的域名。

如果$http_host变量值与任何指定的值都不匹配,$name变量设置为0。如果未设置default参数,$name变量值为空字符串。

如果$http_host变量值为example.com或者*.example.com,$name变量赋值为1。

如果$http_host变量值为example.org或者*.example.org,$name变量赋值为2。

如果$http_host变量值为example.net,$name变量赋值为3。

如果$http_host变量值为wap.*,$name变量赋值为4。

  • if指令(再顺带讲一下if指令,if指令经常会和set指令配合使用。)

将评估指定的条件。如果为 true,则执行大括号内指定的此模块指令。

适用server、location上下文

示例

if ($http_cookie ~* "id=(\S+) {
    set $id $1;
}

示例配置解析:

正则表达式匹配$http_cookie中id的值。接着赋值给$id变量。

注意事项:在使用指令时要注意指令适用的上下文。

Tags:

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

欢迎 发表评论:

最近发表
标签列表