Nginx【通俗易懂】《中篇》

目录

1.Url重写rewrite 

2.防盗链

3.静态资源压缩 

 4.跨域问题


1.Url重写rewrite 🤩🤩🤩

1.1.rewrite书写格式

rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。

  rewrite    <regex>    <replacement>    [flag];

    关键字      正则        替代内容          flag标记

  • 关键字:其中关键字error_log不能改变
  • 正则:perl兼容正则表达式语句进行规则匹配
  • 替代内容:将正则匹配的内容替换成replacement
  • flag标记:rewrite支持的flag标记

flag标记说明:

last  #本条规则匹配完成后,继续向下匹配新的location URI规则

break  #本条规则匹配完成即终止,不再匹配后面任何规则 

redirect  #返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent  #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

1.2.常用正则表达式说明

\

将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”

^

匹配输入字符串的起始位置

$

匹配输入字符串的结束位置

*

匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

+

匹配前面的字符一次或多次。如“ol+”能匹 配“ol”及“oll”、“oll”,但不能匹配“o”

?

匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"

.

匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。

1.3.nginx.conf配置 

 server {
        listen       80;
        server_name  hqdmdxz.com;


        location / {
           rewrite ^/a.png /image/01.png redirect;
           proxy_pass http://hqdmdxz;
           proxy_redirect default;
           proxy_next_upstream error timeout http_500 http_503 http_404;
         }

}

通过测试可以看出,当请求:hqdmdxz/a.png时,会跳转到:hqdmdxz/image/01.png 

rewrite重定向

1.4.if指令

该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置。

语法if (condition){...}
默认值------------------
位置server、 location

condition为判定条件,可以支持以下写法:

  • 1.变量名。如果变量名对应的值为空字符串或"0", if都判断为false,其他条件为true
if($param){
 
}
  • 2.使用"="和"!=比较变量和字符串是否相等,满足条件为true,不满足为false 
if($request_method != POST){
  
}
  • 3. 使用正则表达式对变量进行匹配,匹配成功返回true,否则返回false。变量与正则表达式之间使用"-","-""-","-*"来连接。
  • "-"代表匹配正则表达式过程中区分大小写
  • "~*"代表匹配正则表达式过程中不区分大小写
  • "!~"和"!-*"刚好和上面取相反值,如果匹配上返回false,匹配不上返回true
 if ($http_user_agent ~* safari){
                return 200 Chrome;
       
 }

1.5.return指令  

 该指令用于完成对请求的处理,直接向客户端返回。在return后的所有Nginx配置都是无效的。

 1.6rewrite_log指令 

该指令配置是否开启URL重写日志的输出功能。

语法:rewrite_log on|off;

 注:开启后, URL重写的相关日志将以notice级别输出到error_log指令配置的日志文件汇总

 location /rewrite {
           rewrite_log on;
           error_log logs/error.log notice;
           rewrite ^/rewrite/url\w*$  http://192.168.20.129/a.png;
           rewrite ^/rewrite/(test)\w*$  /$1 redirect;
           rewrite ^/rewrite/(demo)\w*$  /$1 redirect;
         }

2.防盗链🤩🤩🤩

防盗链简单来说就是存在我们服务中的一些资源,只有我们规定的合法的一类人才能去访问,其他人就不能去访问的资源(如css,js,img等资源)。

 具体体现:

  • 准备两台服务器,A服务器跳转到B服务器上,访问B服务器上的图片。
 server {
        listen       80;
        server_name  xz.com;


        location / {
           proxy_pass http://192.168.20.129;
           proxy_redirect default;
           proxy_next_upstream error timeout http_500 http_503 http_404;
         }
}

 通过xz.com/image/01.png,可以访问到图片

 

 给B服务器添加防盗链配置:

    location /image/ {
           root /data/;
           autoindex on;
           valid_referers none blocked 192.168.20.129;

           if ($invalid_referer) {
               return 401;
             }
         }

      location /error/ {
          root /data/;
          autoindex on;
         }

      

       error_page 401 /401.html;
         location = /401.html {
           root html;
         }
  • none: 如果Header中的Referer为空,允许访问 (直接访问图片是没有referer的!!)
  • blocked:在Header中的Referer不为空,但是该值被防火墙或代理进行伪装过,如不带"http://" 、"https://"等协议头的资源允许访问。
  • location /image/ {}为设置防盗链的文件目录,使用竖线|分隔。
  • valid_referers 192.168.20.129;这个是如果返回的头部referer为192.168.20.129那么就不会执行valid_referer下面内容,反之就
  • if ($invalid_referer)这个含义就是结合上面的valid_referers,如果请求头部为192.168.20.129,那么就$invalid_referer就会被赋值为0,就不会执行返回错误代码401,如果不是www.baidu.com,那么就会赋值为1,就会执行下面内
  • return 403;代表返回的状态码为403。

 测试:

ocation /image/ {
           root /data/;
           autoindex on;
           valid_referers  blocked 192.168.20.129;

           if ($invalid_referer) {
               return 401;
             }
}

发现还能访问,为什莫跳转到401.html呢?????? 

解答:因为我们是直接访问的 ,这种是没有头部的(只有二次请求才会有referer头部),而且我们还加none,如果Header中的Referer为空,允许访问)。

  • 配置中去掉none再次访问:防盗链起作用

至此防盗链生效!!!! 

 

3.静态资源压缩 🤩🤩🤩

在Nginx的配置文件中可以通过配置gzip来对静态资源进行压缩,相关的指令可以配置在http块、server块和location块中, Nginx可以通过

  • ngx_http_gzip_module模块
  • ngx_http_gzip_static_module模块
  • ngx_http_gunzip_module模块

对这些指令进行解析和处理。

注:下面的指令都来自ngx_http_gzip_module模块,该模块会在nginx安装的时候内置到nginx的安装环境中,也就是说我们可以直接使用这些指令。

3.1.gzip指令 

1.gizp:用于开启或者关闭gzip功能

2.语法:gzip on|off;

3.2.gzip_types指令

http{
      gzip    on;
      gzip_types  所选值在mime.types查找
}

3.3.gzip_comp_leve指令 

gzip_comp_level指令:该指令用于设置Gzip压缩程度,级别从1-9,1表示要是程度最低,要是效率最高,9刚好相反,压缩程度最高,但是效率最低最费时间。

http {
      gzip_com_level 级别;
}

3.4gzip_vary指令

gzip_vary指令:该指令用于设置使用Gzip进行压缩发送是否携带"Vary:AcceptEncoding"头域的响应头部。主要是告诉接收方,所发送的数据经过了Gzip压缩处理.

语法:gzip_vary  on|off

http {
     gzip_vary on;
}

3.5.gzip_buffers指令 

  • 该指令用干处理请求压缩的缓冲区数量和大小。
  • 语法:gzip_buffers number size; 

其中number:指定Nginx服务器向系统申请缓存空间个数size指的是每个缓存空间的大小。主要实现的是申请number个每个大小为size的内存空间。这个值的设定一般会和服务器的操作系统有关,所以建议此项不设置,使用默认值即可。

 3.6.gzip_disable指令

  • gzip_disable指令:针对不同种类客户端发起的请求,可以选择性地开启和关闭Gzip功能。
  • 语法:gzip_disable regex...;

regex:根据客户端的浏览器标志(user-agent)来设置,支持使用正则表达式。指定的浏览器标志不使用Gzip.该指令一般是用来排除一些明显不支持Gzip的浏览器。

http{
   gzip_disable "Mozilla/5.0.*";
}

3.7.gzip_min_length指令

  • gzip_min_length指令:针对传输数据的大小,可以选择性地开启和关闭Gzip功能。
  • 语法:语法gzip_min_length length;

Gzip压缩功能对大数据的压缩效果明显,但是如果要压缩的数据比较小的话,可能出现越压缩数据量越大的情况,因此我们需要根据响应内容的大小来决定是否使用Gzip功能,响应页面的大小可以通过头信息中的`content-Length`来获取。但是如何使用了Chunk编码动态压缩,该指令将被忽略。建议设置为1K或以上。 

http {
   gzip_min_length 86028;
}

3.8.gzip_proxied指令 

  •  gzip_proxied指令:该指令设置是否对服务端返回的结果进行Gzip压缩。
  • 语法:gzip proxied off|expired|no-cache| <br/> no-store | private | no_last_modified | no_etag |auth |any;

off-关闭Nginx服务器对后台服务器返回结果的Gzip压缩

expired-启用压缩,如果header头中包含 "Expires" 头信息

no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息

no-store-启用压缩,如果header头中包含"Cache-Control:no-store" 头信息

private -启用压缩,如果header头中包含 "Cache-Control:private" 头信息

no_last_modified-启用压缩,如果header头中不包含"Last-Modified" 头信息

no_etag- 启用压缩,如果header头中不包含 "ETag" 头信息

auth-启用压缩,如果header头中包含"Authorization"头信息

any-无条件启用压缩

 4.跨域问题🤩🤩🤩

 4.1同源策略

  • 同源:协议、域名(IP)、端口相同即为同源

4.2什么是跨域 

有两台服务器分别为A,B,如果从服务器A的页面发送异步请求到服务器B获取数据,如果服务器A和服务器B不满足同源策略,则就会出现跨域问题。

4.3解决跨域 

此处用来解决跨域问题,需要添加两个头信息:

  • Access-Control-Allow-Origin:直译过来是允许跨域访问的源地址信息,可以配置多个(多个用逗号分隔),也可以使用*代表所有源
  • Access-Control-Allow-Methods:直译过来是允许跨域访问的请求方式,值可以为GETPOST PUT DELETE...可以全部设置,也可以根据需要设置,多个用逗号分隔
location /请求地址 {
    add_header Access-Control-Allow_orign 允许跨域的id;
    add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MS913/914 25-100MHz 10/12 位用于平面显示器链路Ⅲ的具有直流平衡编码和双向控制通道的串化器和解串器

MS913/MS914 芯片组是 25MHz~100MHz 10 位/12 位 FPD Link III SER/DES(串化器/解串器)&#xff0c;它提供高速 FPD-Link III 接口和高速正向通路以及用于差分对上数据发送的双向 控制通路。广泛应用于车载摄像&#xff0c;医疗设备&#xff0c;管道探测等领 域。 主要特点…

【强化学习-读书笔记】有限马尔可夫决策过程

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. BartoMDP 是强化学习问题在数学上的理想化形式&#xff0c;因为在这个框架下我们可以进行精确的理论说明 智能体与环境的交互 智能体与环境交互&#xff0c;会得到轨迹&…

你真的了解Shiro框架吗?

关注公众号回复20231110获取最新网络安全以及内网渗透等资料。 文章目录 关注公众号回复20231110获取最新网络安全以及内网渗透等资料。Shiro的核心架构Shiro中的认证认证shiro中认证的关键对象 认证流程调试认证流程Shiro的加密过程Shiro中的解密过程总结 Shiro的核心架构 Shi…

ResourceSat2卫星数据下载

印度5米遥感卫星数据开放下载 简介 印度国家遥感中心( NRSC )于近期开放了ResourceSat2卫星的LISS4传感器的数据下载权限&#xff0c;最高分辨率为5米。此次可供下载的有3个波段&#xff08;近红外/红/绿&#xff09;&#xff0c;下载附带3个GeoTIFF和一个元数据文件&#xf…

计算4*4*4空间中2点结构的分布

不考虑两点距离的情况下&#xff0c;3维空间中的两点最多只有7种位置关系。3条边&#xff0c;3条面对角线&#xff0c;1条体对角线。现在向4*4*4的3维空间中随机的扔2个石子&#xff0c;比较7种结构的占比。 得到表格为 1 96 0.0476 2 96 0.0476 3 288 0.1429 4 288 …

Linux 多版本php ,切换默认版本

1.查看当前默认php版本 ls -l /usr/bin/php 后面的 /usr/local/php/bin/php 表示默认版本 2.查看现在安装了多少版本的php &#xff0c;可以用 find / -name php 然后切换到到 7.3 版本上 使用命令&#xff1a;ln -sf /usr/local/php7.3/bin/php /usr/bin/php 如果没…

玩转Docker(一):容器生态系统

文章目录 一、核心技术二、平台技术三、支持技术 本文结构如下&#xff1a; 一、核心技术 容器核心技术是指能够让Container在host上运行起来的那些技术。 &#xff08;1&#xff09;容器规范 容器不光是Docker&#xff0c;还有其他容器&#xff0c;比如CoreOS的rkt。为了保证…

「Verilog学习笔记」可置位计数器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule count_module(input clk,input rst_n,input set,input [3:0] set_num,output reg [3:0]number,output reg zero);reg [3:0] cnt ; always (posed…

AR眼镜_AR智能眼镜整机硬件方案定制

AR眼镜的主要模块包括显示、光学模组、传感器和摄像头、主板、音频和网络连接等。其中&#xff0c;光学显示、主板处理器是决定AR眼镜成本的关键&#xff0c;光机占整体AR眼镜成本43%、处理器占整体成本31%。 AR眼镜的主板设计难点在于尺寸要足够小且要处理好散热问题。主板上的…

VideoComposer:Compositional video synthesis with motion controllability

1.Introduction composer提出了一种一组合性为中心的新的生成范式&#xff0c;能够通过各种输入条件组合生成图像&#xff0c;但是composer主要在空间维度上考虑多级条件。视频复杂的时间结构&#xff0c;其在保持不同帧之间的时间连续性的同时展现出大幅度的时间动态变化。Vi…

【syncfusion】SfGridSplitter 踩坑

SfGridSplitter 是 syncfusion提供的分割线&#xff0c;配合Grid使用可以改变布局大小&#xff1a; <Grid Grid.Row"1"><Grid.ColumnDefinitions><ColumnDefinition Width"1.4*"/><ColumnDefinition MinWidth"10"/><…

Fine-Grained Semantically Aligned Vision-Language Pre-Training细粒度语义对齐的视觉语言预训练

abstract 大规模的视觉语言预训练在广泛的下游任务中显示出令人印象深刻的进展。现有方法主要通过图像和文本的全局表示的相似性或对图像和文本特征的高级跨模态关注来模拟跨模态对齐。然而&#xff0c;他们未能明确学习视觉区域和文本短语之间的细粒度语义对齐&#xff0c;因为…

Linux 中的 container_of 原理

源码基于&#xff1a;Linux 5.10 0.前言 container_of() 这个宏函数在Linux 内核中使用的频率还是很多的。网上关于 container_of 使用的优秀文章也很多&#xff0c;之所以笔者也写一篇&#xff0c;一是想更新下最新代码中的使用&#xff0c;二是融入些自己的拙见&#xff0c;…

排序算法---希尔排序

1. 基本思想 希尔排序是插入排序的一种&#xff0c;它与直接插入排序不同的是&#xff0c;它会优先比较距离较远的元素&#xff0c;因此希尔排序又被称为“缩小增量排序”。希尔排序的实现思路是&#xff1a;先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序&…

VLAN协议与单臂路由

文章目录 VLAN协议与单臂路由一、VLAN的概念及优势1、分割广播域2、VLAN的优势3、VLAN数据帧 二、VLAN的种类1、静态VLAN2、动态VLAN3、VLAN划分方式 三、静态VLAN的配置1、VLAN的范围2、静态VLAN的配置2.1 配置静态VLAN的步骤2.2 vlan三种端口类型举例&#xff1a;配置静态VLA…

代码随想录算法训练营第四十四天 _ 动态规划_完全背包问题、518.零钱兑换II、377.组合总和IV。

学习目标&#xff1a; 动态规划五部曲&#xff1a; ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录&#xff01; 60天训练营打卡计划&#xff01; 学习内容&#xff1a; 完全背包问题 – 二维dp数组 动…

nvm 的使用 nvm 可以快速的切换 nodejs 的版本

nvm 是什么&#xff1f; nvm 是一个 node 的版本管理工具&#xff0c;可以简单操作 node 版本的切换、安装、查看。。。等等&#xff0c;与 npm 不同的是&#xff0c;npm 是依赖包的管理工具。 nvm 下载安装 安装之前需要先把 自己电脑上边的 node 给卸载了!!!! 很重要 下载地…

基于Java SSM框架实现个性化影片推荐系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现个性化影片推荐系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;个性化影片推荐系统当然也不能排除在外。个性化影片推荐系统是以实际运用…

【MySQL】:表的约束(上)

表的约束 一.非空约束二.default约束三.列描述四.zerofill五.主键1.单个主键2.复合主键 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性。比如有…

HCIA-WLAN V3.0,那些重点要点

一、WLAN各个标准&#xff0c;工作频段&#xff0c;理论速率。 二、OFDM和OFDMA&#xff0c;工作频段&#xff0c;空间流。 三、三种帧类型&#xff1a;管理帧、控制帧、数据帧&#xff0c;CAPWAP报文和端口。 四、帧间间隔&#xff0c;波束成形&#xff0c;信道绑定&#xff0…
最新文章