nginx变量
一、Nginx 变量概述
Nginx 变量是一种在 Nginx 配置中用于存储和操作数据的机制,它们可以在不同的配置块(如 http
、server
、location
等)中使用,以实现动态配置和灵活的请求处理。变量的值可以根据各种条件(如请求头信息、URL 参数、服务器状态等)进行动态设置和获取,从而使 Nginx 能够根据不同的情况做出不同的响应和处理决策。
二、Nginx 变量的定义和分类
-
内置变量
- Nginx 提供了许多内置变量,这些变量是 Nginx 核心模块预先定义好的,无需用户额外定义即可直接使用。例如:
$uri
:表示当前请求的 URI(不包括参数部分),如请求/index.html?param=value
,则$uri
的值为/index.html
。$args
:包含当前请求的 URL 参数部分,以上述请求为例,$args
的值为param=value
。$remote_addr
:记录客户端的 IP 地址,对于记录访问日志、进行访问控制等非常有用。$http_user_agent
:存储客户端发送的User-Agent
头信息,可用于根据不同的客户端类型(如浏览器、移动设备等)提供不同的响应内容或进行特定的处理。
- Nginx 提供了许多内置变量,这些变量是 Nginx 核心模块预先定义好的,无需用户额外定义即可直接使用。例如:
-
自定义变量
- 用户可以在 Nginx 配置中使用
set
指令来定义自己的变量。例如:
- 用户可以在 Nginx 配置中使用
http {server {location / {set $my_var "Hello, Nginx!";# 在这里可以使用 $my_var 变量进行后续的配置操作,如在日志中记录、在返回的页面中输出等access_log /var/log/nginx/access.log combined '$remote_addr - $my_var [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';}}
}
- 在上述示例中,定义了一个名为
$my_var
的变量,并赋值为"Hello, Nginx!"
,然后在access_log
指令中使用了这个变量,这样在记录访问日志时,就会将$my_var
的值记录下来。
三、Nginx 变量的作用域
- 配置块级作用域
- Nginx 变量的作用域通常是在其定义的配置块及其子配置块内有效。例如,如果在一个
server
块中定义了一个变量,那么在该server
块内的所有location
块以及其他嵌套的配置块中都可以访问和使用这个变量,但在其他server
块中则无法访问。
- Nginx 变量的作用域通常是在其定义的配置块及其子配置块内有效。例如,如果在一个
http {server {set $server_specific_var "Server A";location / {# 可以在这里使用 $server_specific_var 变量proxy_pass http://backend_server;}}server {# 无法在这里访问 $server_specific_var 变量location / {proxy_pass http://another_backend_server;}}
}
- 请求级作用域
- 变量的值在一次请求的处理过程中是固定的,一旦在某个配置块中为变量赋值,在该请求后续的处理过程中,该变量的值将保持不变,除非在后续的配置块中再次对其进行修改。例如:
http {server {location / {set $my_request_var "Initial Value";proxy_pass http://backend;}location /backend_response {# 在这里 $my_request_var 的值仍然是 "Initial Value",除非在这个位置重新对其赋值add_header X-My-Var $my_request_var;}}
}
四、Nginx 变量在不同配置场景中的应用
- 日志记录
- 如前面提到的在
access_log
指令中使用变量,可以记录更多详细且自定义的信息,以便更好地分析服务器的访问情况。例如:
- 如前面提到的在
http {server {location / {set $request_id "12345"; # 假设这是一个自定义的请求 IDaccess_log /var/log/nginx/access.log combined '$remote_addr - $request_id [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';}}
}
- 这样在日志中就可以通过
$request_id
变量来追踪特定的请求,方便排查问题和进行数据分析。
- 动态资源路径配置
- 可以使用变量来动态地确定资源的路径,例如在反向代理场景中,根据请求的不同参数或特征,将请求转发到不同的后端服务器路径上。
http {upstream backend1 {server backend1.example.com;}upstream backend2 {server backend2.example.com;}server {location /dynamic/ {set $backend "backend1";if ($uri ~* "/dynamic/special/") {set $backend "backend2";}proxy_pass http://$backend;}}
}
- 在上述示例中,当请求的 URI 匹配
/dynamic/special/
时,会将请求转发到backend2
服务器,否则转发到backend1
服务器,通过变量$backend
实现了动态的后端路径选择。
- 条件判断和模块配置
- 在
if
语句、rewrite
模块以及其他一些需要根据特定条件进行配置的场景中,变量发挥着重要作用。例如:
- 在
http {server {location / {set $is_mobile "0";if ($http_user_agent ~* "(iPhone|iPad|Android)") {set $is_mobile "1";}if ($is_mobile = "1") {# 对于移动设备,进行特定的配置,如返回不同的页面或设置不同的缓存策略rewrite ^(.*)$ /mobile$1 break;}}}
}
- 这里通过对
$http_user_agent
变量的检查,判断客户端是否为移动设备,并根据判断结果使用rewrite
指令将请求重定向到对应的移动页面路径,同时使用$is_mobile
变量来记录和传递这个判断结果,以便在后续的配置中使用。
通过合理地使用 Nginx 变量,可以极大地增强 Nginx 服务器的灵活性和动态配置能力,使其能够更好地适应各种复杂的业务需求和场景。在实际使用中,需要根据具体的需求仔细规划和设计变量的使用方式,以确保配置的正确性和高效性。
相关文章:
nginx变量
一、Nginx 变量概述 Nginx 变量是一种在 Nginx 配置中用于存储和操作数据的机制,它们可以在不同的配置块(如 http、server、location 等)中使用,以实现动态配置和灵活的请求处理。变量的值可以根据各种条件(如请求头信…...
网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取
一、概述 记录时间 [2024-12-18] 前置文章:网络编程 01:计算机网络概述,网络的作用,网络通信的要素,以及网络通信协议与分层模型 本文讲述网络编程相关知识——IP 地址,包括 IP 地址的作用、分类ÿ…...
小红书笔记详情API接口:解锁社交媒体商业价值的钥匙
在当今数字化时代,社交媒体平台已成为企业营销和品牌推广的重要渠道。小红书,作为一个以内容分享为核心的社交媒体平台,汇聚了大量用户和创作者,他们在这里分享生活心得、购物体验、美妆技巧等多元化内容。小红书笔记详情API接口&…...
达梦查询表字段详细信息脚本(字段名称、描述、类型、长度及是否为空)
达梦查询表字段详细信息脚本(字段名称、描述、类型、长度及是否为空) 该SQL 脚本,用于查询表中字段的基本信息,包括字段名称、描述、数据类型、数据长度、是否为空及是否为主键等属性。 SQL 脚本 -- 输入变量 DECLAREp_owner VA…...
群落生态学研究进展】Hmsc包开展单物种和多物种分析的技术细节及Hmsc包的实际应用
联合物种分布模型(Joint Species Distribution Modelling,JSDM)在生态学领域,特别是群落生态学中发展最为迅速,它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…...
CSS 语法
CSS 语法 CSS(层叠样式表)是一种用于描述HTML或XML文档样式的样式表语言。它允许您将样式信息与文档内容分离,从而更有效地控制网页的布局和外观。本文将详细介绍CSS的基本语法和结构,帮助您更好地理解和应用CSS。 CSS的基本结构 CSS由一系列的规则组成,每个规则包含一…...
【区块链】区块链密码学基础
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 区块链密码学基础引言一、哈希函数1.1 基本概念1.2 数学表达 二、非对称加密2.1…...
ik分词器了解 和 通过zip安装包的方式 将ik分词器安装到elasticsearch中
目录 1. ik分词器的作用(效果) (1)标准分析器效果 (2)ik_smart分词 (3)ik_max_word分词 2. 首先根据自己的elasticsearch的版本下载对应的ik分词器版本 3. 将下载好的ik分词器…...
【数字化】华为数字化转型架构蓝图
导读:华为的数字化转型规划团队在2016年年底基于对愿景的系统诠释,整合出了数字化转型架构蓝图。该蓝图共分为5层,旨在通过数字化转型实现客户交互方式的转变、作战方式的转变、公司各平台业务能力的数字化、服务化以及运营模式的转变。 目录…...
K8s中 statefulset 和deployment的区别
在 Kubernetes 中,StatefulSet 和 Deployment 是两种管理 Pod 的控制器,它们的主要区别在于 状态管理 和 Pod 的标识。以下是详细对比: 1. 功能定位 Deployment 用途:用于 无状态应用 的部署,例如 Web 服务、API 服务…...
C#多线程系列章节五
线程创建的几种写法 thread类 threadpool 线程池 task类 Thread t = new Thread(func); t.Start();//线程开始执行threadPool.QueueUserWorkItem(test)创建var t1 = new Task(() => test(“Task 1”));t.start();Task.Run(() => test(“Task 2”));Task.Factory.StartNew…...
了解 JVM 运行原理,掌握常见的内存模型以及性能调优的基本方法
JVM运行原理概述 Java Virtual Machine (JVM) 是 Java 程序运行的核心组件,它的运行机制包括加载字节码、字节码解释或编译成本地机器代码执行。下面是 JVM 的运行流程和核心部分: JVM 的运行机制 类加载(Class Loading)…...
游戏AI实现-寻路算法(DFS)
深度优先搜索算法(英语:Depth-First-Search,缩写为DFS)是一种用于遍历或搜索树或图的算法。 寻路地图搭建: 游戏AI实现-寻路地图搭建-CSDN博客 算法过程:遍历方向为从竖直向上沿顺时针方向 1.首先将开…...
Qlib专为AI而生的量化投资平台
1、三层 Infrastructure层 该层为量化研究提供了基础支持。Data Server模块为用户管理和检索原始数据提供了高性能的基础架构。Trainer模块提供了灵活的接口来定义模型的训练过程,同时也为分布式训练提供了接口。Model Manager模块可以让用户更好地管理繁多的AI模型…...
圣乔ERP系统downloadFile.action存在任意文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
YOLOv11改进,YOLOv11添加DLKA-Attention可变形大核注意力,WACV2024 ,二次创新C3k2结构
摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…...
深入解析 `DataFrame.groupby` 和 `agg` 的用法及使用场景
深入解析 DataFrame.groupby 和 agg 的用法及使用场景 1. groupby 的基本用法语法:示例: 2. agg 的基本用法语法:示例: 3. first、sum、lambda 的用法3.1 first示例: 3.2 sum示例: 3.3 lambda示例ÿ…...
用.Net Core框架创建一个Web API接口服务器
我们选择一个Web Api类型的项目创建一个解决方案为解决方案取一个名称我们这里选择的是。Net 8.0框架 注意,需要勾选的项。 我们找到appsetting.json配置文件 appsettings.json配置文件内容如下 {"Logging": {"LogLevel": {"Default&quo…...
[论文阅读]Universal and transferable adversarial attacks on aligned language models
Universal and transferable adversarial attacks on aligned language models http://arxiv.org/abs/2307.15043 图 1:Aligned LLMs 不是对抗性 Aligned。我们的攻击构建了一个单一的对抗性提示,该提示始终绕过最先进的商业模式(包括 ChatG…...
【自动化】Python SeleniumUtil 油猴 工具 自动安装用户脚本
【自动化】Python SeleniumUtil 油猴 工具 【自动化】Python SeleniumUtil 工具-CSDN博客【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691 油猴工具 import timefrom selenium.webdriver.support.wait import WebDriverW…...
[LeetCode-Python版]21. 合并两个有序链表(迭代+递归两种解法)
题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 [] 输出&#x…...
WPF 相比 winform 的优势
wpf 相比 winform 的一些优点,网上也是众说纷纭,总的来说包括下面几点: 丰富的视觉效果:能够创建更具吸引力和现代化的用户界面,支持更复杂的图形和动画效果。不需要像 winform 一样,稍微做一点效果&#x…...
机器学习预处理-表格数据的分析与可视化
机器学习预处理-表格数据的分析与可视化 最近在做一些模型部署的工作,但是发现对于数据的处理、分析、训练方面还是缺少一些系统的学习,因此抽空余时间分析总结一些使用python进行数据处理的实用案例,希望能够方便自己已经其他人的Ctrl CV。…...
Linux——Shell
if 语句 格式:if list; then list; [ elif list; then list; ] ... [ else list; ] fi 单分支 if 条件表达式; then 命令 fi 示例: #!/bin/bash N10 if [ $N -gt 5 ]; then echo yes fi # bash test.sh yes 双分支 if 条件表达式; then 命令 else 命令…...
《深入探究:C++ 在多方面对 C 语言实现的优化》
目录 一、C 在 C 上进行的优化二、C 关键字(C 98)三、C 的输入输出1. cin 和 cout 的使用2. cin、cout 和 scanf()、printf() 的区别 三、命名空间1. 命名空间的使用2. 嵌套命名空间3. 在多个头文件中使用相同的命名空间 四、函数缺省值1. 缺省值的使用2…...
KeepAlive与RouterView缓存
参考 vue动态组件<Component>与<KeepAlive> KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…...
pyparsing restOfLine
在 pyparsing 中,restOfLine 是一个解析器(parser),用于匹配当前位置到行尾的所有内容,通常在解析文件或处理逐行数据时非常有用。 restOfLine 的特性 匹配内容:从当前位置一直匹配到换行符 \n 或字符串结…...
回型矩阵:JAVA
解题思路: 通过定义四条边界;top,left,right,bottom,来循环,当top>bottom&&left>right的时候循环终止 循环结束的条件: 链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述…...
React自学:如何使用localStorage,以及如何实现删除笔记操作
1. 初始化notes 以下这段代码完成了这些操作: 调用 localStorage.getItem("notes") 从浏览器的本地存储中获取名为 “notes” 的数据。使用 JSON.parse 将获取到的字符串解析成数组。如果本地存储中没有 “notes” 数据(返回值为 null&#…...
【CSS in Depth 2 精译_079】第 13 章:渐变、阴影与混合模式概述 + 13.1:CSS 渐变效果(上)——使用多个颜色节点
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点(上) ✔️13.1.2 颜色插值方法(中)13.1…...
汽车供应链 “剧变”开始,“智能感知潜在龙头”诞生
智能汽车产业链“剧变”已经开启,智能感知软硬件能力的权重正在不断被放大。 比如满足高阶泊车的第二代AK2超声波传感器、满足人机共驾场景需求的电子外后视镜(CMS)、iTOF 3D成像视觉感知(用于舱内监控)等新产品&…...
3大Excel免费功能
推荐几个免费excel图表绘制工具 Power Map Power Map是Excel的内置功能 Power Map可在Windows用户的Excel 2013或者Excel 2016或者Office 365中使用,如下图, 看案例 动态地图1 动态地图2...
linux centos 7 安装 mongodb7
MongoDB 是一个基于文档的 NoSQL 数据库。 MongoDB 是一个文档型数据库,数据以类似 JSON 的文档形式存储。 MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求。 MongoDB使用集合(Collections)来组织文档(Documents&a…...
docker 安装 mongo 命令
## 拉取 MongoDB 镜像docker pull mongo:latest## 挂载文件目录:mkdir -p /usr/local/mongo/configmkdir -p /usr/local/mongo/datamkdir -p /usr/local/mongo/logstouch /usr/local/mongo/config/mongod.confchmod 777 /usr/local/mongo## 配置文件##vim …...
问题记录:CH592 PB6/PB10中断输入,无法从掉电模式唤醒
问题描述: PB6上拉输入,连接按键 PB10上拉输入,连接外部充电芯片状态管脚。不充电时开漏输出,充电时低电平 配置PB6和PB10为上拉输入,下降沿触发中断,然后进入掉电模式 理论上: PB6按键触发…...
搭建分布式Spark集群
title: 搭建分布式Spark集群 date: 2024-11-29 12:00:00 categories: - 服务器 tags: - Spark - 大数据搭建分布式Spark集群 本次实验环境:Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3、scala-2.11.5、Spark-3.2.1 功能规划 MasterSlave1Slave2主节点…...
BTP Integration Suite CPI Apache Camel
官网文档: https://help.sap.com/docs/integration-suite/sap-integration-suite/what-is-sap-integration-suite CPI 云集成(CPI)有以下几个特性: SAP Cloud Integration通过消息交换支持端到端流程集成。 它基于Apache软件基金会的开源框架Camel。 …...
Vue-Form-Making:Star5.5k,一款强大的Vue表单设计器,适用于低代码平台、自定义表单
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Vue-Form-Making是一个开源的Vue表单设计器,它允许用户通过拖拽方式快速生成表单,支持多种表单组件和布局。 核心功能 1. 拖拽…...
使用 Vite 和 Redux Toolkit 创建 React 项目
文章目录 1. 创建 React 项目2. 安装依赖3. 创建状态仓库user.js创建 shopSlice 4. 在状态仓库中合并切片5. 在入口文件中导入并使用 store6. 获取切片中的数据7. 修改数据结尾 在本教程中,我们将通过使用 Vite 创建一个 React 项目,并结合 Redux Toolki…...
jmeter连接mysql
查询mysql数据库版本 SELECT VERSION(); 下载jmeter mysql 驱动jar包,版本低于mysql版本,放在jmeter的lib 路径下 MySQL :: Download MySQL Connector/J (Archived Versions) 添加JDBC Connection Configuration 填写 variable name 及数据库信息 注意…...
sql中case when若条件重复 执行的顺序
sql case when若条件重复 执行的顺序 在 SQL 中,如果你在 CASE 表达式中定义了多个 WHEN 子句,并且这些条件有重叠,那么 CASE 表达式的执行顺序遵循以下规则: (1)从上到下:SQL 引擎会按照 CASE …...
代码随想录算法训练营第五十天 | 图 | 并查集
Day 50 总结 自己实现中遇到哪些困难今日收获,记录一下自己的学习时间 15:00 - 16:0018:00 - 19:45 图论 深度收缩 & 广度搜索 BFS, DFS, visited数组, 四个方向并查集 数组代表链表, 用集合中的一个元素代表集合的根最小生成树拓扑排序最短路径算法 图论基…...
tryhackme——Pre Security(安检前)-Offensive Security(进攻性安全)
这里我用的edge的插件闪击翻译。这里我英语不好,所以用这个可以顺便学习下英语。 任务一:What is Offensive Security?(什么是进攻性安全?) 很简单啊,通过阅读,知道以下哪个选项更能代表您模拟黑客操作…...
vue iframe进行父子页面通信并切换URL
使用通义千问提问后得到一个很好的示例。 需求是2个项目需要使用同一个面包屑进行跳转,其中一个是iframe所在的项目,另一个需要通过地址访问。通过 window.parent.postMessage ,帮助 <iframe> 内嵌入的子页面和其父页面之间进行跨域通…...
Cesium 无人机航线规划(区域航线)
区域航线,即划定一片区域一键巡查 这里选择点几个点,形成的区域内计算规划航线...
[NOIP2016 普及组] 海港 -STL-队列queue
[NOIP2016 普及组] 海港 题目背景 NOIP2016 普及组 T3 题目描述 小 K 是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。 小 K 对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一…...
前端页面导出word
html-docx-js bug: vite使用html-docx.js会报错,点击下载上方文件替换即可 正文 npm install html-docx-js -S npm install file-saver -S<template><div id"managerReport">word内容......</div> </template><script>&l…...
C++中的深拷贝和浅拷贝
浅拷贝 浅拷贝:就是简单的赋值操作。 浅拷贝问题:如果有指针指向堆区内存时,不同对象的指针成员指向同一块堆区内存,当对象释放时,该堆区内存会被释放两次。当一个对象修改堆区内存是,另一个对象也随之变…...
MobileLLM开发安卓AI的体验(一)
MobileLLM是一个在安卓端跑的大语言模型,关键它还有调动api的能力 https://github.com/facebookresearch/MobileLLM 项目地址是这个。 看了下,似乎还是中国人团队 article{liu2024mobilellm, title{MobileLLM: Optimizing Sub-billion Parameter Langua…...
MySQL的并发控制与MVCC机制深度解析
目录 1. MySQL中的并发问题2. 数据库的隔离级别3. MVCC(多版本并发控制)机制3.1 MVCC的实现原理3.2 Read View详解3.3 当前读与快照读 4. MVCC在不同隔离级别下的工作方式5. MVCC解决幻读问题6. MVCC的优缺点优点:缺点: 7. MVCC在…...