概述
本章,您将了解到 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";
}
}
}
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论









