Nginx功能篇16—变量

概述

本章,您将了解到 Nginx 中的变量。

变量:计算机中内存的单元,由于存放的值可以变化,因此称为变量。Nginx 之所以有灵活的配置能力,离不开变量这个核心。Nginx 配置文件中的变量常以 $ 开头,如 $host 、$uri 等。使用变量后,您可以动态处理请求、条件逻辑判断、动态重定向、日志格式变更、修改 HTTP 响应头等。

Nginx 配置文件中的变量可以划分为两类:

  • 内置变量 - Nginx 中预先定义的变量,同名变量由不同的模块进行提供。所有的内置变量参阅 这里
  • 自定义变量 - 利用 set 指令来给自定义变量赋值

变量

内置变量

常见的内置变量:

  • $host - "Host" 请求头中的主机名,或与之匹配的服务器名称
  • $request_uri - 完整的原始请求 URI(含参数)。如 https://www.games.com/api/user?id=1&sort=name 中,/api/user?id=1&sort=name 就是 $request_uri 的值
  • $uri - 当前请求的‌标准化路径‌(不含参数)。如 https://www.games.com/api/user?id=1&sort=name 中,/api/user 就是 $uri 的值
  • $hostname - 主机名
  • $request_method - 请求方法,如 GET 或 POST
  • $server_name - 接收了请求的服务器名称
  • $remote_addr - 客户端 IP 地址
  • $binary_remote_addr - 客户端 IP 地址(二进制形式)

在主配置文件 nginx.conf 中见到过定义日志格式时的变量:

...
http {
    ...
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    server {
        ...
        location / {
            ...
        }
    }
}

重定向时也见到过变量:

...
http {
...
    server {
        listen 192.168.100.20:80;
        server_name www.my-tests.com;

        return 301 https://www.my-tests.com$request_uri;
    }

    server {
        listen 192.168.100.20:443 ssl http2 backlog=8000 reuseport;
        server_name www.my-tests.com;

        ...

        location / {
            ...
        }
        ...
    }
}

自定义变量

需要使用 set 指令进行定义,语法为 set $variable value;,可配置在 server、location、if 上下文中。

官方建议不要在有多个嵌套 if 上下文中大量使用 set 指令,而应该是在 location 或 server 上下文中预先初始化变量,再在 if 上下文中修改或引用它。

简单示例:

...
http {
    ...
    server {
        listen 80;
        server_name example.com;

        set $my_var "Hello, World!"

        location  / {
            return 200 "$my_var";
        }
    }
}
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇