OpenResty完全开发指南:构建百万级别并发的Web应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4 变量

“变量”是Nginx内部保存的运行时HTTP/TCP请求相关数据,可以在编写配置文件时任意引用,使得编写Nginx配置文件更像是编写程序(但注意不要与编程语言里的变量概念混淆,两者是完全不同的)。

在配置文件里使用变量需要以“$”开头,例如$request_method、$args、$uri等(这与Shell和Perl是一样的)。变量的用法很多,例如记录访问日志,设置反向代理的参数,或者传递给Lua程序获取各种运行时信息。

以下列举了几个在HTTP服务里较常见的变量:

    ■  $uri              :当前请求的URI,但不含“? ”后的参数;
    ■  $args             :当前请求的参数,即“? ”后的字符串;
    ■  $arg_xxx          :当前请求里的某个参数,“arg_”后是参数的名字;
    ■  $http_xxx         :当前请求里的xxx头部对应的值;
    ■  $sent_http_xxx    :返回给客户端的响应头部对应的值;
    ■  $remote_addr      :客户端IP地址。

如果执行下面的curl命令:

curl 'http://localhost/index.html? a=1&b=2' -H 'hello: world'

那么这些变量的值就是:

$uri                  = /index.html
$args                 = a=1&b=2
$arg_a                = 1
$arg_b                = 2
$http_hello           = world
$sent_http_server     = openresty/1.13.6.2
$remote_addr          = 127.0.0.1

Nginx内置的变量非常多,详细的列表可以参考Nginx官网文档。此外,Nginx也允许使用指令自定义变量,最常用的就是set,例如:

set $max_size        10000; #定义变量$max_size="10000"