Nginx 全局变量详解:解析与应用
Nginx 提供了一系列全局变量,这些变量可以在配置文件的不同层级中使用,包括 server、location 甚至 if 块内。这些变量包含了有关请求的各种信息,可以用于条件判断、日志记录、URL 重写等多种用途。以下是 Nginx 中一些常用全局变量的介绍及示例。
通用变量
- $args:获取完整的查询字符串,不含问号。例如,请求
http://example.com/index.php?id=1&name=test,那么$args的值将是id=1&name=test。 - $arg_name:获取查询字符串中名为 name 的单个值。上述例子中,
$arg_id的值为1。 - $document_root:当前
location块的根目录。常用于指定文件路径,如读取静态文件。 - $host:请求头中的 Host 字段,即被请求的主机名称。
- $remote_addr:客户端IP地址。
- $remote_user:已认证用户的用户名,常见于 Basic 认证场景。
- $request_method:请求方法,如 GET、POST。
- $scheme:请求使用的协议,通常是
http或https。 - $server_name:虚拟主机名称,由
server块的server_name指令定义。 - $server_port:服务器监听的端口号。
- $status:最终请求的状态码。
- $uri:未解码的原始请求URI,包含完整路径。
- $request_uri:同
$uri,但在多数情况下$uri更常用于配置中。 - $is_args:查询字符串的前缀,如果存在查询字符串则是
?,否则为空。 - $request_body:POST 请求体的内容。
条件变量
- $fastcgi_status:FastCGI 请求状态。
- $proxy_status:Proxy 请求状态。
- $upstream_status:Upstream 服务器的请求状态。
日志变量
- $time_local:请求开始的时间戳(本地时区)。
- $time_iso8601:ISO 8601 格式的日期和时间。
- $msec:毫秒级别的请求处理时间。
- $request_time:请求处理总时间(从接收到客户端关闭连接为止)。
实战应用
示例1:条件判断
if ($host ~* ^(www\.)?mydomain\.com) {
set $redirect "yes";
}
示例2:日志输出
log_format custom_log '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
示例3:重写规则
rewrite ^/(.*)\.html $1 permanent;
以上只是冰山一角,Nginx 全局变量种类繁多,涵盖了请求、响应、环境等各个方面。正确理解和应用这些变量,可以极大地增强 Nginx 的灵活性和功能,无论是在日志分析、权限控制还是 URL 重写等方面都能发挥作用。