Nginx变量概述
Nginx 变量允许你在配置文件中使用动态值,这对于构建灵活和可维护的 Web 服务器配置非常有用。下面是对 Nginx 变量的一个详细说明,包括它们的用途、如何定义和使用它们,以及一些示例。
Nginx 变量概述
Nginx 支持多种类型的变量,这些变量可以用于不同的上下文中,比如 server、location 或者 upstream 块中。变量通常用于配置文件中,以提供更高级别的抽象和灵活性。例如,你可以使用变量来动态地设置文件路径、响应头等。
1. 内置变量
Nginx 提供了一系列内置变量,这些变量由 Nginx 自身维护,可用于各种目的。常见的内置变量包括:
$request_method
:HTTP 请求方法(GET, POST 等)。$args
:变量中存放了URL中的所有参数$is_args
:如果有参数为?否则为空$uri
:请求的 URI。$document_uri
:文档 URI。$document_root
:保存了针对当前资源的请求的系统根目录$host
:请求中的 Host 头字段。$remote_addr
:客户端 IP 地址。$remote_port
:客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口$remote_user
:已经经过Auth Basic Module验证的用户名$request_time
:从接收第一个字节到发送最后一个字节所花费的时间(以秒为单位)。$status
:响应的状态码。$http_user_agent
:客户端的 User-Agent 字段。$http_cookie
:客户端的所有cookie信息。$server_name
:匹配的 server_name。$server_port
:服务器监听的端口。$server_addr
:保存了服务器的IP地址$scheme
:请求的协议(http 或 https)。$query_string
:请求的查询字符串部分。$request_body
:请求体。$request_body_file
:做反向代理时发给后端服务器的本地资源的名称。$request_method
:请求资源的方式,GET/PUT/DELETE等$request_filename
:Nginx 计算出的用来响应请求的文件名。$request_uri
:包含请求参数的原始URI,不包含主机名
2. 自定义变量
你还可以定义自己的变量。自定义变量可以用于存储任何需要在配置文件中重复使用的值。自定义变量的定义和使用方法如下:
定义自定义变量
你可以使用 set
指令来定义一个自定义变量。例如:
set $variable "value";
在配置文件中使用变量
一旦定义了一个变量,你就可以在配置文件的其他部分使用它。例如:
root /var/www/$var;
3. 变量扩展
Nginx 还支持变量扩展,这意味着你可以在一个变量中使用另一个变量的值。例如:
set $path /var/www;
set $docroot $path/$var;
4. 条件表达式
Nginx 支持使用条件表达式来根据某些条件来设置变量。例如:
if ($http_user_agent ~* (MSIE|Trident)) {
set $ie 1;
} else {
set $ie "";
}
5. map 指令
map
指令允许你根据某个变量的值来映射另一个变量。例如:
map $http_cookie $backend {
default backend1;
"session=1" backend2;
}
6. 示例
使用变量来动态设置根目录
set $root_var "/var/www";
root $root_var;
根据用户代理来重定向
if ($http_user_agent ~* MSIE) {
return 301 http://www.example.com/ie.html;
}
使用 map 指令来选择不同的后端服务器
map $http_cookie $backend {
default backend1;
"session=1" backend2;
}
upstream backend1 { server 10.0.0.1; }
upstream backend2 { server 10.0.0.2; }
location / {
proxy_pass http://$backend;
}
7. 注意事项
- 变量在 Nginx 配置文件中只能在特定的上下文中使用。
- 变量在运行时是不可修改的,除非你使用
map
或者if
指令。 - 当使用变量时,Nginx 会先计算变量的值,然后再使用该值。