nginx--rewrite

news2024/9/25 15:26:47

功能

Nginx服务器利用ngx_http_rewrite_module 模块解析和处理理rewrite请求,此功能依靠PCRE(Perl Compatible Regular Expressions),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为访问,另外还可以在一定程度上提高网站的安全性

PCRE官方站点: http://www.pcre.org/

模块指令

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

 if

使用

Nginx的if语法仅能用if做单次判断,不支持使用if else或者if elif这样的多重判断,可以配置在server或location块中进行配

语法

if (条件匹配) {
     action
}

正则表达式

=:比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false。
!=: 比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false。
~:表示在匹配过程中区分大小写字符,(可以通过正则表达式匹配),满足匹配条件为真,不满足为假。
!~:为区分大小写字符且匹配结果不匹配,不足满为真,满足为假。
~*: 表示在匹配过程中不区分大小写字符,(可以通过正则表达式匹配),满足匹配条件真,不满足为假。
!~*: 为不区分大小字符且匹配结果不匹配,满足为假,不满足为真。
-f 和 ! -f: 判断请求的文件是否存在和是否不存在
-d 和 ! -d: 判断请求的目录是否存在和是否不存在。
-x 和 ! -x: 判断文件是否可执行和是否不可执行。
-e 和 ! -e: 判断请求的文件或目录是否存在和是否不存在(包括文件、目录、软链接)。

 案例

文件存在
location /m78 {
    root /data/nginx/html/pc;
    default_type text/html;
    if (-f $request_filename){
       echo "look look look";
      }
     }  
  }
​ 
 文件不存在
  location /m78 {
    root /data/nginx/html/pc;
    default_type text/html;
    if (-f $request_filename){
       echo "look look look";
      }
     }  
  }

 

 判断网站的协议
  location /m78 {
    root /data/nginx/html/pc/www;
    default_type text/html;
    if ( $scheme = http ){
       echo "website is http";
     } 
    if ( $scheme = https ){
       echo "website is https";
      }
     }  
  }

​ 

 set

使用

自定义变量,定义的变量可以调用nginx内置变量,也可以调用值

语法

set $key $value

案例

 location /m78 {
    root /data/nginx/html/pc/www;
    default_type text/html;
    if ( $scheme = http ){
       echo "website is http";
     } 
    if ( $scheme = https ){
       echo "website is https";
      }
     }  
  

break

使用

退出操作,不在执行后面的指令,可以使用在server,location,if

案例

  location /m78 {
    root /data/nginx/html/pc/www;
    default_type text/html;
    set $name fxq;
    echo $name;
    break;
    set $port $server_port;
    echo $port;
     }  
  }

return

使用

return⽤用于完成对请求的处理,并直接向客户端返回响应状态码,可以指定重定向URL或者指定提示文本内容(特殊状态码403/500等),处于此指令所有配置不执行,可应用在server,if,location

语法

 return code; 返回给客户端指定的HTTP状态码

 return code (text); 返回给客户端的状态码及响应体内容,可以调用变量

 return code URL;返回给客户端的URL地址

案例

返回状态码
  location /m78 {
    root /data/nginx/html/pc/www;
    default_type text/html;
    if ( $scheme = http ) {
      return 555;  
      }
     }  
  }

 返回状态码并显示文本内容
  location /m78 {
    root /data/nginx/html/pc/www;
    default_type text/html;
    if ( $scheme = http ) {
      return 555 " website is no exist";  
      }
     }  
  }

  返回状态码并跳转
  location /m78 {
    root /data/nginx/html/pc/www;
    default_type text/html;
    if ( $scheme = http ) {
      return 301 http://xiaodi8.com/;  
      }
     }  
  }

rewrite_log

使用

设置是否开启记录ngx_http_rewrite_module模块日志记录到error_log日志文件当中,可以配置http、server、location或if当中,需要日志级别为notice

rewrite

URL和URI

URI(universal resource identifier):通用资源标识符,标识一个资源的路径,可以不带协议。
URL(uniform resource location):统一资源定位符,是用于在Internet中描述资源的字符串,是
URI的子集,主要包括传输协议(scheme)、主机(IP、端口号或者域名)和资源具体地址(目录和文件名)等三部分,⼀一般格式为 scheme://主机名[:端口号][/资源路径],如:http://www.a.com:8080/path/file/index.html就是⼀一个URL路径,URL必须带访问协议。
每个URL都是⼀个URI,但是URI不都是URL。

例如:
http://example.org:8080/path/to/resource.txt #URI/URL
ftp://example.org/resource.txt #URI/URL
/absolute/path/to/resource.txt #URI

使用

可以配置server、location、if

 参考:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

 语法

rewrite regex replacement [flag];
rewrite 正则匹配客户端请求 修改后的请求 标记位;

注意

如果在同⼀级配置块中存在多个rewrite规则,那么会自下⽽下逐个检查;被某条件规则替换完成后,会重新⼀轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制,如果替换后的URL是以http://或https://开头,则替换结果会直接以重向返回给客户端, 即永久重定向301

rewrite flag

使用

利用nginx的rewrite的指令,可以实现url的重新跳转,rewrtie有四种不同的flag,分别是redirect(临时重定向,状态码302)、permanent(永久重定向,状态码301)、break和last。其中前两种是跳转型的flag,后两种是代理型,跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的。

参数

redirect;临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302

permanent;重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301

last;重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在多location配置环境中使用

break;重写完成后停止对当前URL在当前location中后续的其它重写操作,而后直接将匹配结果返还给客户端即结束循环并返回数据给客户端,建议在多location配置环境中使用

 案例

permanent
  location /m78 {
     root /data/nginx/html/pc;
     default_type text/html;
     rewrite / http://xiaodi8.com permanent;
     }  
  } 

 redirect
  location /m78 {
     root /data/nginx/html/pc;
     default_type text/html;
     rewrite / http://xiaodi8.com redirect;
     }  
  }

break

1.结束当前location后续的write操作

2.break结束后会直接返回数据,不会跳出当前location再对URL进行和其他location匹配

[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf
server {
  listen 80;
  listen       443 ssl;
  ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;
  ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;
  ssl_session_cache shared:sslcache:20m;
  ssl_session_timeout 10m;
  server_name www.fxq.com;
  location / {
     root /data/nginx/html/pc;
     index index.html;
  }
  location = /favicon.ico {
     root /data/nginx/html/pc;
  }
  location /break {
     #return 666 "break";
     root /data/nginx;
     index index.html;
     rewrite ^/break/(.*) /test1/$1 break;#break匹配成功后不再向下匹配,也不会跳转到其他的location,即直接结束匹配并给客户端返回结果数据。
     rewrite ^/break/(.*) /test1/$2 break;#break不会匹配后面的rewrite规则也不匹配其location
      }
  location  /test1 {
     #return 999 "test1";
     root /data/nginx;
     index index.html;
    }
   location /test2 {
     #return 777;
     root /data/nginx;
     index index.html;
    }
  }

last

1.结束当前location后续的write操作

2.当前location的write结束后会将产生的新的URL跳出当前loction进行与其他location的匹配

[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf 
server {
  listen 80;
  listen       443 ssl;
  ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;
  ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;
  ssl_session_cache shared:sslcache:20m;
  ssl_session_timeout 10m;
  server_name www.fxq.com;
  location / {
     root /data/nginx/html/pc;
     index index.html;
  }
  location = /favicon.ico {
     root /data/nginx/html/pc;
  }
  location /break {
     #return 666 "break";
     root /data/nginx;
     index index.html;
     rewrite ^/break/(.*) /test1/$1 last;
     rewrite ^/break/(.*) /test1/$2 last;
      }
  location  /test1 {
     #return 999 "test1";
     root /data/nginx;
     index index.html;
    }
  location  /test2 {
     #return 777;
     root /data/nginx;
     index index.html;
    }
  }

自动跳转http
[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf 
server {
  listen 80;
  listen       443 ssl;
  ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;
  ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;
  ssl_session_cache shared:sslcache:20m;
  ssl_session_timeout 10m;
  server_name www.fxq.com;
  location / {
     root /data/nginx/html/pc;
     index index.html;
     if ( $scheme = http ) { #未加条件判断,会导致死循环
       rewrite / https://www.fxq.com/;
    }
  }
  location = /favicon.ico {
     root /data/nginx/html/pc;
  }
  }

 判断文件是否存在
[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf 
server {
  listen 80;
  listen       443 ssl;
  ssl_certificate  /apps/nginx/certs/www.fxq.com.crt;
  ssl_certificate_key /apps/nginx/certs/www.fxq.com.key;
  ssl_session_cache shared:sslcache:20m;
  ssl_session_timeout 10m;
  server_name www.fxq.com;
  location / {
     root /data/nginx/html/pc;
     index index.html;
     if ( !-f $request_filename ) {
       rewrite (.*) https://www.fxq.com/;
    }
  }
  location = /favicon.ico {
     root /data/nginx/html/pc;
  }
  }   

文件绝对安全

chattr +i 文件

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

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

相关文章

上位机图像处理和嵌入式模块部署(树莓派4b下ros安装方法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 随着嵌入式开发板算力越来越强,很多的同学开始用树莓派做一些ros开发的工作。目前来说,ros有两个版本,分别是ro…

ChatGPT 4.0 直接用 !!!Code Copilot编程大模型、DALL-E AI绘图、绘制流程图、上传文件

嗨,你好呀,我是哪吒。 这一年最让人揪心的热点,就是各种层出不穷的AI技术。 原以为它只是短暂霸屏,但现实却赤裸裸展示了,什么叫AI抢走你的饭碗,连招呼都不打一声! 什么策划方案、公众号文案、营销卖点、…

电脑切换窗口快捷键,让你轻松驾驭多个任务

在使用电脑时,经常需要切换不同的窗口,以便快速地访问不同的应用程序或任务。为了提高效率,掌握一些电脑切换窗口快捷键是非常重要的。本文将介绍三种在电脑上切换窗口的方法,帮助您更加高效地进行多任务处理。 方法1:…

SAP PP学习笔记11 - PP中的MRP相关概念,参数,配置

上文讲了作业区的概念及配置。 SAP PP学习笔记08 - 作业区(工作中心Work Center),作业区Customize-CSDN博客 SAP PP学习笔记09 - 作业区(工作中心Work Center)Customize2(管理码,班次顺序&…

菜鸡学习netty源码(五)—— EventLoop

1.EventLoop的类关系图 2. EventExecutor /*** 返回自身的对象* Returns a reference to itself.*/OverrideEventExecutor next();/*** 获取所属的EventExecutorGroup* Return the {link EventExecutorGroup} which is the parent of this {link EventExecutor},*/EventExecuto…

EPICS DataBase详解

1、分布式EPICS设置 1) 操作界面:包括shell命令行方式(caget, caput, camonitor等)和图形界面方式(medm, edm, css等)。 2)输入输出控制器(IOC) 2、IOC 1) 数据库:数据流,基本上周期运行 2)sequencer:基…

ThingsBoard如何接受设备通过TCP发送的报文

1、概述 2、案例 2.1、阐述 2.2、导入依赖 2.3、构建Netty服务链接,接受的端口为8092 2.4、对数据进行相应的处理发送到ThingsBoard客户端 2.5、通过TCP链接工具 ​2.6、查看遥测数据 1、概述 TCP(Transmission Control Protocol,传输…

关于 c++的模板库中的数组模板 is_array_v的测试

&#xff08;1&#xff09;该模板的源代码如下&#xff1a; template <class> // determine whether type argument is an array bool is_array_v false;template <class _Ty, size_t _Nx> bool is_array_v<_Ty[_Nx]> true;template <class _Ty>…

屏蔽罩材质和厚度对屏蔽效能的影响

​ 一&#xff0e;屏蔽效能的影响因素 屏蔽效能的影响因素主要有两个方面&#xff1a;屏蔽材料的特性和厚度&#xff1b;如下图所示&#xff0c;电磁波经过不同媒介时&#xff0c;会在分界面形成反射&#xff0c;穿过界面的电磁波一部分被反射回去&#xff0c;这部分能量损失…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module&#xff1a; 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

自学错误合集--MessageSource国际化接口

java后端自学错误总结 一.MessageSource国际化接口总结 一.MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的…

hadoop启动后没有namenode,datanode等解决方法

之前用的是虚拟机&#xff0c;在虚拟机上安装的hadoop&#xff0c;但是后来&#xff0c;电脑恢复出厂设置了&#xff0c;什么都重新开始。就在本地安装 Linux 子系统。 但是&#xff0c;有时候start-dfs.sh后&#xff0c;jps出现错误。 像这种拒绝连接 解决办法就是如下&…

智慧隧道建设中,如何提升隧道广播清晰度,解决隧道广播有效发布问题

近年来&#xff0c;我国高速公路智慧隧道建设步伐加快&#xff0c;全国各地高速公路运营单位纷纷加大投资力度&#xff0c;进行智慧隧道建设&#xff0c;提高隧道智能化水平。通过高清视频监控、AI视频识别、雷视融合、全域轨迹、激光雷达、火灾报警、气体检测、亮度检测、自动…

倪海厦(二)以果决其行,放空自己。

研究任何学问&#xff08;事物&#xff09;&#xff0c;批判去看&#xff0c;假设--验证--结果。以果决其行&#xff01;&#xff01;&#xff01;放空自己。学而后思&#xff0c;思学并进。 其实总结下来&#xff0c;也正如倪老师所说&#xff0c;以果决其行&#xff0c;我们…

STM32F1之FLASH闪存

目录 1. 简介 2. 闪存模块组织 3. FLASH基本结构 4. FLASH解锁 5. 使用指针访问存储器 6. 程序存储器全擦除 7. 程序存储器页擦除 8. 程序存储器编程 9. 选项字节 1. 简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过…

第 129 场 LeetCode 双周赛题解

A 构造相同颜色的正方形 枚举&#xff1a;枚举每个 3 3 3\times 3 33的矩阵&#xff0c;判断是否满足条件 class Solution {public:bool canMakeSquare(vector<vector<char>>& grid) {for (int i 0; i < 2; i)for (int j 0; j < 2; j) {int c1 0, c…

一款 NodeJS 版本管理工具 NVM (Windows)

一、简介 Node Version Manager&#xff08;NVM&#xff09;是一种用于管理多个 NodeJS 版本的工具。在日常工作中&#xff0c;我们可能同时在进行多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;依赖与不同版本的NodeJS 运行环境。这种情况下&#xff0c;维护…

通过DataGrip将mysql表结构信息转存excel 复制select结果的insert插入语句

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的专栏 总结 | 提效 | 拓展&#xff0c;在这个系列专栏中记录了博主在学习期间总结的大块知识点&#xff0c;以及日常工作中遇到的各种技术点 ┗|&#xff40;O′|┛ &#x1f306; 内容速览 1 查询表结构信息&#xff0c;并…

巴菲特称AI与核武器一样可怕,并调侃AI诈骗可能成下一个增长产业|钛媒体AGI | 最新快讯

总的来看&#xff0c;巴菲特对于 AI 有所知晓&#xff0c;希望它能够是件好事&#xff0c;而且认为AI会颠覆和改变这个世界&#xff0c;但是他并不是很了解&#xff0c;也言下之意表示&#xff0c;他并不会在 AI 领域进行投资。 &#xff08;图片来源&#xff1a;由 AI 生成的巴…