nginx脚本,Nginx变量截取字符串,拼接字符串,nginx打印日志,添加修改HTTP请求头,添加修改HTTP响应头

news2024/11/23 17:13:57

nginx变量

nginx变量命名,以$开头。

举例:'nginx.conf 文件'中有下面这一行配置:
 
set $var "hello world";
 
特点:我们看到,'Nginx 变量名'前面'有一个 $ 符号',这是'语法上'的要求
 
强调:所有的 'Nginx 变量'在 Nginx 配置文件中'引用时都须带上 $ 前缀',这种表示方法和'Perl、PHP' 这些语言是'相似'的

变量赋值

举例:'nginx.conf 文件'中有下面这一行配置:
 
set $var "hello world";
 
特点:我们看到,'Nginx 变量名'前面'有一个 $ 符号',这是'语法上'的要求
 
强调:所有的 'Nginx 变量'在 Nginx 配置文件中'引用时都须带上 $ 前缀',这种表示方法和'Perl、PHP' 这些语言是'相似'的

打印日志(打印变量)

打印日志的目的,是想知道某个变量的值是多少,通过add_header设置响应头,间接地打印日志。

通过设置响应头,然后在浏览器上请求nginx地址,然后得到的响应头,就知道变量值是多少了。


        location / {
            proxy_pass http://127.0.0.1:8085;
            add_header mmm "123";
            set $test "456";
            add_header nnn $test;
        }
     }

Nginx特有的语法

这个需要注意一下,特别是正则 ~ ,后面截取字符串需要用到。

模式

含义

 =

= 表示精确匹配

 ^~

^ 进行前缀匹配,~ 表示区分大小写

 ~ 

~ 区分大小写的正则匹配

 ~* 

~* 不区分大小写的正则匹配

 !~

区分大小写不匹配

 !~*

不区分大小写不匹配

 

 Nginx变量截取字符串,拼接字符串

同样是间接的方式,核心思想,使用正则()匹配,然后使用$1、$2、$3...取值。
比如有个字符串,A123B789C,使用正则表达式,A(\d+)B(\d+)C,然后就可以使用$1取值为123,$2取值为789

        location / {
            proxy_pass http://127.0.0.1:8085;

			#定义一个变量$myname,为空字符
			set $myname "";
			#定义一个变量为测试字符串
			set $user "A123B789C";

			#使用正则匹配
			if ( $user ~ A(\d+)B(\d+)C ) {
				# set $mmm $1;
				# set $nnn $2;
				#字符串的连接直接挨着就行了,不需要连接符。
				set $myname $1$2;
			}

			#间接打印日志,前台ccc 响应头的值为:123789
			add_header ccc $myname;
        }

这里需要注意,基础的正则表达式语法都是通用的。比如,+表示1个或者多个,*表示0个或者多个,.表示任意字符,\d表示数字。

获取请求头的参数

须要在header名称前面加上固定前缀“http_“,并将header名称中的“-”中划线变为下划线

 

 请求头取值如下:


        location / {
            proxy_pass http://127.0.0.1:8085;

             add_header aaa $http_Pragma;
             add_header bbb $http_Cache_Control;
        }


添加修改HTTP请求头

        location / {
            proxy_pass http://127.0.0.1:8085;
            proxy_set_header User-Agent "My Custom User Agent";
            proxy_set_header kk "123";
        }

添加修改HTTP响应头

location / {
    add_header X-Custom-Header "Hello, World!";
    add_header X-Powered-By Nginx;
    add_header Cache-Control no-store;
  }

删除HTTP响应头

 location / {
    proxy_pass http://backend;
    proxy_hide_header X-Powered-By;
  }

内置变量

$remote_addr;
  存放了'客户端的地址',注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为'路由器的公网IP'
 
$args;
  变量中存放了'请求行中(GET请求)的参数',例如http://node101.yinzhengjie.org.cn/main/index.do?'id=20190221&partner=search'中的id=20190221&partner=search
 
$document_root;
  保存了针对'当前资源的请求'的'系统根目录',如/apps/nginx/html -->对应'root'指令
 
$document_uri;
  保存了当前请求中'不包含指令的URI',注意是'不包含请求'的指令,比如http://node101.yinzhengjie.org.cn/main/index.do?id=20190221&partner=search会'被定义为/main/index.do'
 
$host;
  存放了'请求的host名称'
 
$http_user_agent;
  '客户端浏览器'的详细信息
 
$http_cookie;
  '客户端的cookie'信息
 
limit_rate 10240;
echo $limit_rate;
  如果nginx服务器使用limit_rate配置了'显示网络速率',则会显示,如果'没有设置',则'显示0'
 
$remote_port;
  客户端请求Nginx服务器时'随机打开的端口',这是每个'客户端自己的端口'
 
$remote_user;
  已经'经过Auth Basic Module验证'的用户名
 
$request_body_file;
  做'反向代理'时发给'后端服务器的本地资源'的名称
 
$request_method;
  请求'资源的方式',GET、PUT、DELETE等
 
$request_filename;
  当前'请求的资源文件的路径'名称,由root或alias指令与URI请求生成的文件'绝对路径',如:/apps/nginx/html/main/index.html
 
$request_uri;
  包含'请求参数'的原始URI,'不包含主机名',如:/main/index.do?id=20190221&partner=search 
 
$scheme;
  请求的'协议',如ftp、https、http等
 
$server_protocol;
  保存了'客户端请求资源'使用的协议的版,如HTTP/1.0、'HTTP/1.1'、HTTP/2.0等
 
$server_addr;
  保存了'服务器的IP地址'
 
$server_name;
  请求的'服务器的主机名'
 
$server_port;
  请求的'服务器的端口号'
 
+++++++++++++++'补充知识点'+++++++++++++++
 
$arg_name           请求中的'name参数'-->请求的参数的名字,根据'具体情况'而定
$binary_remote_addr 远程地址的'二进制'表示
$body_bytes_sent    已发送的'消息体'字节数
$content_length     HTTP请求信息里的"Content-Length"
$content_type       请求信息里的"Content-Type"
$host               请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名
$http_referer       '引用地址'
$http_via           '最后'一个访问服务器的'ip地址'
$is_args            如果请求行'带有参数',返回"?",否则'返回空字符串'
$nginx_version      当前运行的nginx版本号
$pid                'worker进程'的PID
$query_string       与$args'相同'
$realpath_root      按root指令或alias指令算出的'当前请求的绝对路径',其中的'符号链接'都会解析成真是文件路径
$request            '用户请求'
$request_body       这个变量(0.7.58+)包含'请求的主要信息',在使用proxy_pass或fastcgi_pass指令的location中'比较有意义'
$request_body_file  客户端'请求主体'信息的'临时文件名'
$request_completion 如果'请求成功',设为"OK";如果'请求未完成'或者'不是'一系列请求中最后一部分则设为空
$request_filename   当前请求的文件路径名,比如/opt/nginx/www/test.php
$request_uri        请求的URI,'带参数'; 比如http://localhost:88/test1/
$uri                请求的URI,可能'和最初的值有不同',比如经过'重定向'之类的
$http_name          用来获取'任意请求头'的值


 

参考:

Nginx配置HTTP响应头修改和添加 | ModStart

Nginx 获取自定义请求header头和URL参数

Nginx(十一)变量_nginx 打印变量_wzj_110的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

热门实践丨如何结合实际业务进行 ECS 规格选型与容量验证

作者:赵佳佳 随着云原生技术的蓬勃发展以及云产品价格愈发低廉,越来越多 Geek 开发者、技术爱好者选择 OSS 对象存储、ECS 云服务器等基础产品构建自己的网站、网盘等应用。但对于企业而言,面对种类与规格的丰富的 ECS 云服务器,…

【网络原理之三】应用层协议HTTP和HTTPS

HTTP什么是HTTP工作过程协议格式协议内容HTTP请求MethodURLURL的encode和decode Version请求报头请求正文 HTTP响应状态码响应报头 HTTPSHTTPS执行过程加密对称加密非对称加密 证书 HTTP 什么是HTTP HTTP:超文本传输协议。是一种应用非常广泛的应该层协议。 所谓 “…

Mybatis应用(3)——mybatis框架使用 mybatis项目应用初步 mybatis使用报错集锦

目录 引出mybatis框架使用1.导包:mybatis包分页的包pom.xml文件【war包】1.导包:mybatis包分页的包pom.xml文件【jar包】2.resources下配置mybatis-config.xml文件,以及log4j.properties文件3.在resources下建文件4.在UserMapper中写SQL myba…

若依v3.2问题解决:菜单路由不匹配 / 跳转路由页面空白

问题1解决方法 问题2解决方法 问题1 菜单路由不匹配 ,在菜单管理中匹配代码中的相应组件,可是在页面上总是报匹配错误,下面是报错情况和相关数据库 解决方法 因为店铺管理是一个目录,而店铺详情和店铺列表是菜单,路…

UC伯克利LLM排行榜(Chatbot Arena Leaderboard)再更新!GPT-4稳居第一,Vicuna-33B登顶开源模型第一

UC伯克利LLM排行榜(Chatbot Arena Leaderboard)再更新!GPT-4稳居第一,Vicuna-33B登顶开源模型第一 文章目录 1. LMSYS ORG更新「LLM排位赛」2. 全新评价机制:MT-Bench2.1 为什么选择 MT-Bench?2.2 用LLM评…

Vue 常用指令 v-bind 绑定动态值

v-bind 用于动态绑定一个或多个属性值,或者向另一个组件传递props值(这个后面再介绍),应用场景:图片地址src、超链接href、动态绑定一些类、样式等等 绑定超链接 v-bind作用在属性上面绑定动态值。 v-bind 指令后接收一个参数,以冒号分割。v…

MySQL 第二天作业 操作表和用户权限

一、1.创建数据库 Market,在 Market 中创建数据表customers,customers表结构如表4.6所示,按要求进行操作。 (1)创建数据库Market。 create database Market;(2)创建数据表customers,在c_num字段上添加主键…

ModaHub魔搭社区:如何在 Jupyter Notebook 用一行代码启动 Milvus Lite?

目录 轻量版 Milvus 能做什么? 如何在 Jupyter Notebook 中使用向量数据库? 随着各种大语言模型(LLM)的涌现和 AI 技术变得越来越普遍,大家对于向量数据库的需求也变得越来越多。作为大模型的记忆体,向量…

【新星计划Linux】——常用命令(1)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.常用命令 1.Linux的基本原则: 用户接口: 2.命令形…

多肽中间体:23927-13-1,Cyclo(-D-Ala-D-Ala),3,6-二甲基-2,5-哌嗪二酮,的解析说明

Cyclo(-D-Ala-D-Ala),3,6-二甲基-2,5-哌嗪二酮,(3R,6R)-二甲基-哌嗪-2,5-二酮,(3R,6R)-3,6-二甲基哌嗪-2,5-二酮产品结构式: 产品规格: 1.CAS号:23927-13-1 2.分子式:C6H10N2O2 3.分子量&#x…

xNIDS-解释基于深度学习的网络入侵检测系统实现自动入侵响应

文章目录 AbsIntroMotivation and ChallengesExplaining Detection Results of DL-NIDS目标近似历史输入围绕历史记录输入进行采样捕捉特征之间的依赖关系模型开发 Generating Defense Rules防御规则范围Defense Rule Scope安全性约束 Security Constraint统一防御规则 Unified…

仅个人记录 CMX复现

文章解析(214条消息) CMX: Cross-Modal Fusion for RGB-X SemanticSegmentation with Transformers_cmx: cross-modal fusion for rgb-x semantic segment_翰墨大人的博客-CSDN博客 代码 GitHub - huaaaliu/RGBX_Semantic_Segmentation 一、 环境配置 conda create -n rgbx…

暑假第三天打卡

Java: (1)main()方法格式固定,表示程序入口 public static void main(String[] args) (2)java程序严格区分大小写 (3)System.out.println():换行 System.out.print():不换行 &…

【洛谷】P2700 逐个击破

思路&#xff1a; 先上一份ACode:&#xff08;具体解释思路在下面&#xff09; #include<bits/stdc.h> using namespace std; #define int long long const int N1e510,M2*N; int n,k,x,fa[N],sum; struct E {int u,v,w; } e[M]; int head[N],cnt; bool vis[N];bool cm…

爬虫入门04——requests库中的User-Agent请求头

import requests#定义请求的url url https://www.baidu.com/ #https://site.ip138.com/www.xicidaili.com/#发起get请求 res requests.get(url url)#获取响应结果#响应对象 print(res)#获取响应状态码 print(res.status_code)#获取响应数据 print(res.text) #返回的是字符…

SignalPlus X 北大汇丰商学院 X SHEF 公开课

&#x1f4e2; SignalPlus X 北大汇丰商学院 X SHEF &#x1f4a0; 数字金融和 AI 量化系列课程第二课 &#x1f4a0; 课程主题&#xff1a;机器学习在金融市场的应用 &#x1f4a0; 时间&#xff1a;2023 年 7 月 5 日 星期三 下午 19:00-21:00 &#x1f4a0; 授课方式&#…

【JUC进阶】10. 使用JMH进行性能测试

目录 1、前言 2、传统的性能测试 2、什么是JMH 3、Hello JMH 3.1、Maven相关依赖 3.2、编写简单示例 4、基本属性配置 4.1、BenchmarkMode 4.2、Benchmark 4.3、OptionsBuilder & Options 4.4、迭代Iteration 4.5、预热&#xff08;Warmup&#xff09; 4.6、状…

一图掌控污水厂运营——远眺污水厂数字孪生平台「捷码精品应用展」

随着我国城市化率的提升与环保意识的逐渐提升&#xff0c;对于污水处理的意识与需求也越来越强&#xff0c;需要处理的污水日益增多&#xff0c;污水厂承担的压力明显变大。 传统污水厂通常通过人工巡检的方式&#xff0c;进行设备和厂区检查和监测&#xff0c;这种方法效率低下…

MODBUSTCP和MODBUSRTU数据帧对比

工具介绍 ModBus Poll 在TCP中模拟客户端&#xff0c;在RTU中模拟主机&#xff1b;&#xff08;请求数据方&#xff09; ModBus Slave 在TCP中模拟服务器&#xff0c;在RTU中模拟从机&#xff1b;&#xff08;响应数据方&#xff09; 数据帧简介 ModBus是一种通信协议&#…

Spring整合Elasticsearch(2)

原生查询 可以查询的范围更精确,当ElasticsearchRepository提供的基本方法无法满足我们所需要的查询可以使用原生的方式查询 Test//原生查询public void naticeQuery(){//创建原生查询构建器对象NativeSearchQueryBuilder queryBuilder new NativeSearchQueryBuilder();//过滤…