当前位置: 首页 > news >正文

Nginx高级配置 | Nginx变量使用

文章目录

  • 一、内置变量
  • 二、自定义变量

免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn
Nginx 变量可在配置文件中引用,用于功能判断(如访问控制、重定向)、日志记录等多种场景。变量主要分为两类:内置变量和自定义变量。

一、内置变量

内置变量由 Nginx 模块提供,通过这些变量可以获取大量与客户端访问相关的信息。完整变量列表请参考官方文档:http://nginx.org/en/docs/varindex.html

常用内置变量

•$remote_addr
存放客户端的公网 IP 地址。•$proxy_add_x_forwarded_for
此变量的值为:客户端请求头中的 X-Forwarded-For字段内容(如果有),后跟一个逗号 ,,再追加 $remote_addr(客户端的公网 IP)。如果请求头中没有 X-Forwarded-For字段,则此变量的值等于 $remote_addr。常用于在多级代理中传递原始客户端 IP。•$args
存放 URL 中的查询字符串(Query String)部分(即 ?之后的内容)。例如,对于 URL http://www.magedu.org/main/index.do?id=20190221&partner=search,$args的值为 id=20190221&partner=search。•$is_args
如果请求 URL 中包含查询字符串(即有 ?和参数),则此变量值为 ?;否则为空字符串 ""。常用于在拼接 URL 时决定是否需要添加 ?。•$document_root
存放根据当前请求匹配的 root或 alias指令设置的根目录路径。例如:/apps/nginx/html。•$document_uri
存放当前请求的 URI(不包含查询字符串和协议、主机)。例如,对于 URL http://www.magedu.org/main/index.do?id=20190221&partner=search,$document_uri的值为 /main/index.do。•$host
存放客户端请求头中的 Host 字段值,即请求的主机名。•$limit_rate
如果配置了 limit_rate指令限制响应速率,此变量会返回配置的值(如 10240);否则返回 0。•$remote_port
存放客户端发起请求时使用的源端口号。•$remote_user
存放通过 HTTP Basic Authentication(auth_basic模块)认证后的用户名。•$request_body_file
当 Nginx 将客户端请求体(request body)临时存储到文件以发送给后端服务器时,此变量存放该临时文件的路径名​(主要在反向代理场景中使用)。•$request_method
存放客户端使用的请求方法,如 GET、POST、PUT、DELETE等。•$request_filename
存放当前请求所对应资源在服务器上的完整文件系统路径。该路径由 root或 alias指令与 $uri组合计算得出。例如:/apps/nginx/html/main/index.html。•$request_uri
存放客户端的原始请求 URI(包含查询字符串,不包含协议和主机)​。其值等于 $document_uri?$args。例如:/main/index.do?id=20190221&partner=search。•$scheme
存放请求使用的协议方案,如 http、https、ftp等。•$server_protocol
存放客户端请求使用的协议版本,如 HTTP/1.0、HTTP/1.1、HTTP/2.0。•$server_addr
存放服务器接收请求的 IP 地址。•$server_name
存放匹配当前请求的 server块中的 server_name 指令值。•$server_port
存放服务器接收请求的端口号。•$http_user_agent
存放客户端请求头中的User-Agent字段值,包含客户端的浏览器详细信息。•$http_cookie
存放客户端请求头中的 Cookie 字段值,包含客户端发送的所有 Cookie 信息。•$cookie_<name>
存放请求头中名为 <name>的特定 Cookie 的值。<name>需替换为实际的 Cookie 名称。例如,$cookie_sessionid获取名为 sessionid的 Cookie 值。•$http_<header_name>
存放客户端请求头中名为 <header_name>的任意头部字段的值。<header_name>需转换为小写字母,并将短横线 -替换为下划线 _。例如:•$http_user_agent等同于 $http_user_agent(但推荐直接使用内置变量)。•$http_referer获取 Referer头信息。•$http_x_forwarded_for获取 X-Forwarded-For头信息。•$sent_http_<header_name>
存放服务器在响应中发送的名为 <header_name>的任意响应头部字段的值。<header_name>需转换为小写字母,并将短横线 -替换为下划线 _。例如:•$sent_http_content_type获取 Content-Type响应头信息。•$sent_http_cache_control获取 Cache-Control响应头信息。•$sent_http_server获取 Server响应头信息(注意:Nginx 自身版本信息通常由 $nginx_version获取更直接)。•$arg_<name>
存放 URL 查询字符串中名为 <name>的参数值。例如,对于 URL http://example.com/?id=123&name=foo:•$arg_id的值是 123。•$arg_name的值是 foo。

配置示例 (location /main):​

location /main {index index.html;default_type text/html;echo "hello world,main->";echo $remote_addr;       # 客户端公网IPecho $args;             # 查询字符串echo $document_root;    # 根目录echo $document_uri;     # 不包含查询参数的URIecho $host;             # 请求主机名echo $http_user_agent;  # 用户代理echo $http_cookie;      # 所有Cookieecho $request_filename; # 资源文件系统路径echo $scheme;           # 协议echo "$scheme://$host$document_uri?$args"; # 完整请求URL
}

二、自定义变量

可以通过 set指令自定义变量名称并赋值。

语法:

set $variable value;
  • Default:​​ —

  • Context:​server, location, if

示例:

set $name lhl;         # 定义变量 $name 并赋值 'magedu'
echo $name;               # 输出: mageduset $my_port $server_port; # 将内置变量 $server_port 的值赋给自定义变量 $my_port
echo $my_port;             # 输出服务器端口 (e.g., 80)echo "$server_name:$server_port"; # 输出服务器名和端口 (e.g., www.lhl.org:80)

请不要以此视为定论,这只是我的个人经验

http://www.xdnf.cn/news/1388125.html

相关文章:

  • RoadMP3告别车载音乐烦恼,一键get兼容音频
  • 20250828在荣品RD-RK3588-MID开发板的Android13系统下适配Bainianxing的GPS模块BU-16M10
  • STM32项目分享:基于单片机的自行车测速系统设计
  • C++ DDS框架学习
  • 【前端教程】用 JavaScript 实现4个常用时间与颜色交互功能
  • mysql安全运维之常见攻击类型与防御指南-从SQL注入到权限提升
  • iOS 文件管理与 uni-app 性能优化实战 多工具协作的完整指南
  • 知识卡片html5动态网页源码
  • 2025-08-28-zabbix5.0创建监控项通过脚本简单实现监控oracle11g的磁盘组和表空间的使用量
  • 【从零开始搭建你的 AI 编程助手知识库】
  • Docker的常用命令及简单使用
  • 微积分 | 积分代换
  • 探索永洪vividime的超链接功能:数据分析的桥梁
  • C# NET5.0及以上版本中如何处理MySQL大数据查询
  • 数据防泄与最小可见:ABP 统一封装行级安全(RLS)+ 列级脱敏
  • Go对接全球期货数据源指南:基于StockTV API实现多品种实时监控
  • whisper-large-v3 模型
  • Rust Tokio异步任务实战教程(高级功能)
  • 【前端教程】二维数组排序实战:按需封装才是最优解——拒绝冗余,精简代码
  • Rust语言能干什么
  • PHP的uniqid() 函数分析
  • LangChain实战(二):环境搭建与Hello World(国内开源模型版)
  • 嵌入式Linux驱动开发 - 并发控制机制
  • 【开题答辩全过程】以 基于Spring Boot的网上家庭烹饪学习系统的设计与实现为例,包含答辩的问题和答案
  • 不止 ChatGPT:多模态 AI(文本 + 图像 + 音频)正重构内容创作全流程
  • 以技术赋能强化消费者信任,助推餐饮服务质量提质增效的明厨亮灶开源了
  • [密码学实战]基于SM2实现协同签名(四十五)
  • 微算法科技(NASDAQ:MLGO)一种基于FPGA的Grover搜索优化算法技术引领量子计算
  • QT5.14.2、CMake 扩展openCV
  • JVM_JMM