Nginx内置变量应用场景分析

2025-11-24 18:50

本文主要是介绍Nginx内置变量应用场景分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一...

Nginx 的内置变量是其配置灵活性的核心,它们提供了丰富的客户端请求和服务器状态信息。下述表格汇总了这些变量,并附带了实用的分类和说明,方便快速查阅和使用。

1. Nginx 内置变量速查表

变量类别

变量名

说明与示例

请求URI与参数

$uri/ $document_uri

当前请求的URI(不含参数),可能经过内部重写。例:/api/user

$request_uri

客户端原始的完整请求URI(含参数)。例:/api/user?id=1

$args/ $query_string

请求行中的参数字符串。例:id=1&name=test

$arg_name

获取指定名称的参数值。例:$arg_id的值为 1

$is_args

如果请求有参数,值为?,否则为空。常用于拼接URL

客户端信息

$remote_addr

客户端的直接IP地址

$http_x_forwarded_for

透传客户端原始IP的请求头,常用于识别经过代理的www.chinasem.cn真实用户IP

$http_user_agent

客户端浏览器标识

$http_referer

请求来源页面

请求内容

$request_method

HTTP 请求方法,如 GETPOST

$content_length

请求头中的 Content-Length字段

$content_type

请求头中的 Content-Type字段

$request_body

客户端的请求主体内容

服务器信息

$host

请求的主机名,优先级:请求行 > "Host"请求头 > 匹配的服务器名

$server_name

当前匹配的服务器块名称

$server_port

请求到达的服务器端口

$scheme

请求协议httphttps

$https

若为SSL安全模式,值为 on,否则为空

文件路径

$document_root

当前请求的文档根目录或别名

$request_filename

当前请求映射到的本地文件系统路径

响应与性能

$status

HTTP 响应状态码

$body_bytes_sent

发送给客户端的响应体字节数(不含头)

$request_time

处理请求所耗费的时间

其他常用变量

$cookie_name

获取指定名称的 Cookie 值

$http_name

获取任意请求头字段,将-替换为下划线,字母小写。例:$http_accept_language

$nginx_version

Nginx 版本号

$time_iso8601

服务器时间的 ISO 8601 格式

2. 核心变量详解与应用场景

了解这些变量的典型用法,能帮助你更好地配置Nginx。

  • 精确控制:$uri 与 $request_uri
    • $uri反映的是当前请求经过Nginx内部处理(如重写规则)后的URI,不带参数。它常用于内部重定向或作为其他指令的输入。
    • $request_uri则是客户端发来的原始请求,包含所有参数,且是只读的。在构建反向代理请求时,如果你希望原封不动地将客户端请求传递给后端,通常会使用 $request_uri
  • 获取客户端真实IP:$remote_addr $http_x_forwarded_for
    • 当客户端与Nginx服务器之间没有代理时,python$remote_addr就是客户端的真实IP。
    • 当存在反向代理(如CDN、负载均衡器)时,$remote_addr会是最后一个代理服务器的IP。此时,代理服务器通常会将客户端的原始IP放在 X-Forwarded-For请求头中,这个值可以通过 $http_x_forwarded_for变量获取 。处理多级代理时,这个变量可能包含一个IP列表。
  • 灵活获取请求头:$http_name
    • 这是一个通用变量,name可以替换为任何请求头字段名的小写字母和下划线形式。例如,获取 Accept-Language头,使用 $http_accept_language。这为根据请求头信息做差异化处理提供了极大灵活性。

3. 实际应用举例

下面通过几个常见场景展示这些变量的用法。

记录详细日志

你可以在 log_format中组合使用变量,记录更丰富的信息。例如,记录客户端IP、用户代理、请求处理时间和响应状态:

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

访问控制与重定向

根据参数重写URL:

if ($arg_version = "v2") {
    rewr编程ite ^/api/(.*)$ /v2/api/$1 last;
}

基于原始IP进行访问限制(注意:需确保代理服务器正确设置了 X-Forwarded-For):

# 允许来自192.168.1.100和10.0.0.0/8网段的请求
if ($http_x_forwarded_for !~* "^(192\.168\.1\.100|10\..*)") {
    return 403;
}

代理配置

在反向代理设置中,常使用变量向后端传递原始请求信息:

location /api/ {
    proxy_pass http://backend_server;
    # 将原始Host头传递给后端
    proxy_set_header Host $host;
    # 传递客户端真实IP
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

4. 注意事项

  • 变量使用场景:并非所有变量都可以在所有配置指令中使用,具体需参考Nginx官方文档。
  • 条件判断:在Nginx配置中,尤其是在 if指令中使用变量进行字符串匹配或条件判断时,需要特别注意Nginx的匹配规则,有时可能需要使用 ~*(不区分大小写匹配)或 ~(区分大小写匹配)等操作符 。
  • 变量性能android:大部分内置变量开销很小,但频繁在复杂逻辑或高并发场景下使用某些涉及字符串处理的变量仍需注意。

到此这篇关于Nginx内置变量应用场景分析的文章就介绍到这了,更多相关nginx内置变量内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Nginx内置变量应用场景分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156261

相关文章

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

C++ scoped_ptr 和 unique_ptr对比分析

《C++scoped_ptr和unique_ptr对比分析》本文介绍了C++中的`scoped_ptr`和`unique_ptr`,详细比较了它们的特性、使用场景以及现代C++推荐的使用`uni... 目录1. scoped_ptr基本特性主要特点2. unique_ptr基本用法3. 主要区别对比4. u

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

Java多种文件复制方式以及效率对比分析

《Java多种文件复制方式以及效率对比分析》本文总结了Java复制文件的多种方式,包括传统的字节流、字符流、NIO系列、第三方包中的FileUtils等,并提供了不同方式的效率比较,同时,还介绍了遍历... 目录1 背景2 概述3 遍历3.1listFiles()3.2list()3.3org.codeha

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

Java中接口和抽象类的异同以及具体的使用场景

《Java中接口和抽象类的异同以及具体的使用场景》文章主要介绍了Java中接口(Interface)和抽象类(AbstractClass)的区别和联系,包括相同点和不同点,以及它们在实际开发中的具体使... 目录一、接口和抽象类的 “相同点”二、接口和抽象类的 “核心区别”关键区别详解(避免踩坑)三、具体使

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse