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

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博客

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值