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;
  当前'请求的资源文件路径'名称,由rootalias指令与URI请求生成文件'绝对路径',如:/apps/nginx/html/main/index.html
 
$request_uri;
  包含'请求参数'的原始URI,'不包含主机名',如:/main/index.do?id=20190221&partner=search 
 
$scheme;
  请求的'协议',如ftphttpshttp等
 
$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_rootroot指令或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博客

原文地址:https://blog.csdn.net/u014644574/article/details/131566309

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22686.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注