插件窝 干货文章 nginx变量怎么用

nginx变量怎么用

变量 Nginx 使用 http 459    来源:    2025-04-07

Nginx 变量使用指南

Nginx 提供了强大的变量系统,可以在配置文件中使用这些变量来实现动态配置。以下是关于 Nginx 变量的详细使用方法:

基本变量类型

1. 内置变量

Nginx 提供了许多内置变量,可以直接使用:

$host - 请求的主机名
$remote_addr - 客户端IP地址
$request_uri - 完整的原始请求URI
$args - 请求中的参数
$http_user_agent - 用户代理字符串
$server_name - 服务器名称
$scheme - 请求协议(http或https)
$request_method - 请求方法(GET/POST等)

2. 自定义变量

使用 set 指令定义变量:

set $my_var "some value";

变量使用场景

1. 日志记录

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';

2. 条件判断

if ($http_user_agent ~* "mobile") {
    set $mobile 1;
}

3. 重定向

location / {
    if ($scheme = "http") {
        return 301 https://$host$request_uri;
    }
}

4. 代理设置

location /api/ {
    proxy_pass http://backend$request_uri;
}

变量插值

变量可以在字符串中使用:

set $prefix "/static";
location $prefix/ {
    root /var/www;
}

变量作用域

  • 大部分变量在请求级别有效
  • 使用 map 指令可以创建更复杂的变量映射
map $http_user_agent $is_mobile {
    default       0;
    "~*mobile"    1;
}

常用变量示例

获取请求头

$http_<header_name>  # 例如 $http_user_agent, $http_referer

获取Cookie

$cookie_<cookie_name>

获取查询参数

$arg_<parameter_name>

注意事项

  1. 变量名区分大小写
  2. 变量在配置解析时展开,运行时不会重新计算
  3. 某些变量只在特定上下文中可用
  4. 过度使用变量可能影响性能

高级用法

使用 map 创建条件变量

map $uri $new_uri {
    /old/path /new/path;
    default   $uri;
}

server {
    rewrite ^ $new_uri;
}

使用 eval 模块进行变量计算

(需要安装第三方模块)

set $a "1";
set $b "2";
set_by_lua $sum "return tonumber(ngx.var.a) + tonumber(ngx.var.b)";

掌握 Nginx 变量的使用可以大大提高配置的灵活性和动态性,实现更复杂的流量控制和内容处理逻辑。