Nginx的Rewrite和Location配置

目录

一、Rewrite模块

1.功能概述

1.1URL重写

1.2URL重定向 

1.3条件判断 

1.4重写规则的执行顺序 

2.语法格式 

2.1Flag说明 

3. Rewrite跳转实现

4.常用的Nginx正则表达式 

二、Location模块

1.概述

2.分类 

2.1精准匹配(=)

2.2前缀匹配(默认匹配)

2.3优先前缀匹配(^~)

2.4正则匹配(区分大小写~)

2.5正则匹配(不区分大小写~*) 

2.6通配符匹配(/) 

2.7总结

3.location匹配案例

三、Nginx常用网站匹配案例

1.网站根路径的精准匹配

2.静态文件请求的处理 

3.通用规则——动态请求的转发 

4.总结 

四、Rewrite跳转案例

1.基于域名的跳转

2.基于客户端IP访问跳转

3.基于旧域名跳转到新域名并添加目录 

4.基于参数匹配的跳转 

5.基于目录下所有PHP文件的跳转 

6.基于指定URL请求的跳转 


一、Rewrite模块

1.功能概述

1.1URL重写

基于正则表达式的重写:
使用正则表达式匹配请求的URL,并将其重写为新的URL。常用于修改请求的路径或参数
基于变量的重写:

利用Nginx提供的内置变量(如`$host`、`$request_uri`等)或自定义变量来控制URL的重写

1.2URL重定向 

临时重定向(302 Redirect):
将请求临时重定向到另一个URL。客户端的浏览器会显示新的URL
永久重定向(301 Redirect):
将请求永久重定向到另一个URL。客户端的浏览器会记住并使用新的URL

1.3条件判断 

基于条件的重写:

可以使用 if 指令来添加条件判断,根据请求的不同条件决定是否执行重写

1.4重写规则的执行顺序 

在 server 块中的 rewrite 指令会在匹配到 location 之前执行
location 块中的 rewrite 指令会在匹配到 location 之后执行
在 if 语句中的 rewrite 指令会在 if 条件满足时执行

2.语法格式 

rewrite <regex> <replacement> [flag];

regex:正则表达式,用于匹配请求的URI
replacement:匹配成功后,新的URI
flag:可选标志,指定重写的行为

2.1Flag说明 

last:本条规则匹配完成后,继续向下匹配新的location URL规则,一般用在 server 和 if 中
break:本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在 location 中
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

3. Rewrite跳转实现

Nginx:

通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
跳转:

从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
PCRE支持:

perl兼容正则表达式的语法规则匹配
重写模块set指令:

创建新的变量并设其值

4.常用的Nginx正则表达式 

符号说明示例
^匹配输入字符串的起始位置^abc 匹配 abcdef,但不匹配 habc
$匹配输入字符串的结束位置abc$ 匹配 xyzabc,但不匹配 abcxyz
*匹配前面的字符零次或多次lo* 匹配 l、lo、loo 等
+匹配前面的字符一次或多次lo+l 匹配 l、lol、lool 等
?匹配前面的字符零次或一次colou?r 匹配 color 或 colour
.匹配除“\n”之外的任何单个字符a.b 匹配 acb、adb 等
\将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用\$ 匹配 $,\\ 匹配 \
\d匹配纯数字\d{3} 匹配 123、456 等
{n}重复前面的字符 n 次a{3} 匹配 aaa
{n,}重复前面的字符 n 次或更多次a{2,} 匹配 aa、aaa、aaaa 等
{n,m}重复前面的字符 n 到 m 次a{2,4} 匹配 aa、aaa、aaaa
[ ]定义匹配的字符范围[a-z] 匹配小写字母
[c]匹配单个字符 c[a] 匹配 a
[a-z]匹配 a-z 小写字母的任意一个[a-z] 匹配任意小写字母
[a-zA-Z0-9]匹配所有大小写字母或数字[a-zA-Z0-9] 匹配任意字母或数字
()表达式的开始和结束位置(abc)+ 匹配 abcbac、abcabcabc 等
|或运算符匹配 aa|bb|cc 三个中的一个

二、Location模块

1.概述

在Nginx配置中,location指令用于定义 URL 匹配规则,并为匹配的请求指定不同的处理方式location块可以用来设置不同的处理逻辑,比如重写请求、代理请求、指定根目录、添加额外的头部等

2.分类 

2.1精准匹配(=)

匹配方式:要求请求的 URI 必须与 location 指定的路径完全匹配
优先级:优先级最高,匹配到后不再进行其他匹配

2.2前缀匹配(默认匹配)

匹配方式:匹配 URI 的前缀。Nginx 默认使用这种方式进行匹配
优先级:如果有多个前缀匹配,Nginx 会选择最长的那个

2.3优先前缀匹配(^~)

匹配方式:如果使用 ^~前缀,则表示该路径是优先前缀匹配,即如果匹配到了这个
location,则不再进行正则匹配
优先级:高于正则匹配,低于精确匹配

2.4正则匹配(区分大小写~)

匹配方式:使用正则表达式进行匹配,区分大小写
优先级:低于 ^~ 和精确匹配,高于默认的前缀匹配

2.5正则匹配(不区分大小写~*) 

匹配方式:使用正则表达式进行匹配,不区分大小写
优先级:与区分大小写的正则匹配相同,但适用于大小写不敏感的匹配

2.6通配符匹配(/) 

匹配方式:这是一个通用的前缀匹配,用来匹配所有请求。在其他location都没有匹配时作为兜底使用
优先级:最低

2.7总结

location 匹配的先后顺序
首先看优先级:精确>前缀>正则>一般>通用
优先级相同

正则看上下顺序,上面的优先;

一般匹配看长度,最长匹配的优先;
精确、前缀、正则、一般都没有匹配到,最后再看通用匹配

3.location匹配案例

(1)location = /         http://www.kgc.com/        

他不会匹配 /data       http://www.kgc.com/data
=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location  /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/

 (2)location / {}        http://www.kgc.com/data  http://www.kgc.com/data/abc     /a/usr/local/nginx/html/data/abc  
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,但若后面是正则表达式会和最长字符串优先匹配(最长匹配)

(3)location /documents/ {}      http://www.kgc.com/documents/abc
匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

 (4)location /documents/abc {}     www.baidu.com/
匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location
只有其它 location后面的正则表达式没有匹配到时,才会采用这一条

三、Nginx常用网站匹配案例

1.网站根路径的精准匹配

这是必选规则,用于处理直接访问网站首页的请求。由于通过域名访问网站首页非常频繁采用这种配置可以加速首页的处理。首页可以是一个静态页面,也可以直接转发给后端应用服务器

location = / {root   html;index  index.html index.htm;
}

用途:加速首页加载,提高用户访问速度
配置:将请求定向到静态文件或后端应用服务器

2.静态文件请求的处理 

这是Nginx作为HTTP服务器的强项,用于高效地处理静态文件请求。可以通过目录匹配或后缀匹配。两种模式进行配置,也可以搭配使用

目录匹配location ^~ /static/ {root /webroot/static/;
}

用途:处理存放在 /static/ 目录中的静态文件,如图片、样式表、脚本等 

后缀匹配location ~* \.(html|gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}

用途:通过文件后缀匹配处理特定类型的静态文件,如图片、HTML文件、CSS 文件等
配置:匹配所有符合特定后缀的文件请求,确保这些文件的高效处理

3.通用规则——动态请求的转发 

此规则用于处理所有非静态文件的请求,默认将这些请求视为动态请求,并将其转发到后端应用服务器处理

location / {proxy_pass http://tomcat_server;
}

用途:将所有未被其他location规则匹配的请求转发给后端服务器(如 Tomcat)处理,适用于php、jsp等动态请求
配置:通过反向代理将请求转发到指定的后端应用服务器

4.总结 

精确匹配网站根路径:加速首页访问
静态文件匹配:提高静态资源的加载效率
通用规则:将动态请求转发给后端服务器处理

四、Rewrite跳转案例

1.基于域名的跳转

需求:将旧域名www.kgc.com跳转到www.benet.com,并保留URL参数

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  www.kgc.com;charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;location / {# 域名重定向if ($host = 'www.kgc.com') {rewrite ^/(.*)$ http://www.benet.com/$1 permanent;}root   html;index  index.html index.htm;}
}

效果:浏览器访问 http://www.kgc.com/test/1.htm1 将会跳转到http://www.benet.com/test/1.htm1,并返回 301 状态码,表明永久重定向成功

2.基于客户端IP访问跳转

需求:所有访问都显示维护页面,只有IP 为172.16.58.10的客户端可以正常访问

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  www.kgc.com;charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;# 设置是否合法IP的标记set $rewrite true;if ($remote_addr = "172.16.58.10") {set $rewrite false;}# 非法IP跳转到维护页面if ($rewrite = true) {rewrite (.+) /weihu.html;}location = /weihu.html {root /var/www/html;}location / {root   html;index  index.html index.htm;}
}

效果:除IP为172.16.58.10外的所有访问都将被重定向到 /weihu.html 页面

3.基于旧域名跳转到新域名并添加目录 

需求:将访问 http://bbs.kgc.com/post/ 跳转到 http://www.kgc.com/bbs/post/

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  bbs.kgc.com;charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;location /post {rewrite (.+) http://www.kgc.com/bbs$1 permanent;}location / {root   html;index  index.html index.htm;}
}

效果:访问 http://bbs.kgc.com/post/1.htm1 将会跳转到 http://www.kgc.com/bbs/post/1.html

4.基于参数匹配的跳转 

需求:访问 http://www.kgc.com/100-(100|208)-100.htm1时,跳转到 http://ww.kgc.com首页

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  www.kgc.com;charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {rewrite (.+) http://www.kgc.com permanent;}location / {root   html;index  index.html index.htm;}
}

效果:访问 http://www.kgc.com/100-200-100,htm1或http://www.kgc.com/100-100-100.html都会跳转到 http://www.kgc.com

5.基于目录下所有PHP文件的跳转 

需求:访问http://www.kgc.com/upload/123.php时,跳转到http://www.kgc.com首页

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  www.kgc.com;charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;location ~* /upload/.*\.php$ {rewrite (.+) http://www.kgc.com permanent;}location / {root   html;index  index.html index.htm;}
}

效果:访问http://www.kgc.com/upload/123.php将跳转到http://www.kgc.com

6.基于指定URL请求的跳转 

需求:访问http://www,kgc.com/abc/123.html时,跳转到http://www.kgc.com首页

vim /usr/local/nginx/conf/nginx.confserver {listen       80;server_name  www.kgc.com;charset utf-8;access_log  /var/log/nginx/www.kgc.com-access.log;location ~* ^/abc/123.html {rewrite (.+) http://www.kgc.com permanent;}location / {root   html;index  index.html index.htm;}
}

效果:访问http://www.kgc.com/abc/123.htm1将跳转到http://www.kgc.com

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

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

相关文章

游戏如何对抗 IL2cppDumper逆向分析

众所周知&#xff0c;Unity引擎中有两种脚本编译器&#xff0c;分别是 Mono 和 IL2CPP 。相较于Mono&#xff0c;IL2CPP 具备执行效率高、跨平台支持等优势&#xff0c;已被大多数游戏采用。 IL2CPP 模式下&#xff0c;可以将游戏 C# 代码转换为 C 代码&#xff0c;然后编译为…

python爬虫——入门

一、概念 万维网之所以叫做网&#xff0c;是因为通过点击超链接或者进入URL&#xff0c;我们可以访问任何网络资源&#xff0c;从一个网页跳转到另一个网页&#xff0c;所有的相关资源连接在一起&#xff0c;就形成了一个网。 而爬虫呢&#xff0c;听名字就让人想起来一个黏糊…

string类题目(上)

string类题目 题目来源&#xff08;Leetcode&#xff09; 题目一&#xff1a;仅仅反转字母 分析 这个反转的特点在于只反转字母&#xff0c;不反转特殊字符。 法一&#xff1a;如果我们让一个正向迭代器指向第一个字符&#xff0c;让一个反向迭代器指向最后一个字符&#xf…

ch32v307vct6从头移植FreeRTOS

使用官方的ide可以直接创建带FreeRTOS的工程&#xff0c;但是不利于我们学习移植&#xff0c;所以特此记录怎么从头开始移植FreeRTOS到CH32V307VCT6芯片使用。 下载FreeRTOS源码 首先进入https://www.freertos.org/官网&#xff0c;然后找到如下Download字样&#xff0c;进入下…

华为云通过自定义域名访问桶内对象

问题&#xff1a;通过将自定义域名绑定至OBS桶实现在线预览文件 例如index.html入口文件 且记 自定义域名绑定暂时不支持HTTPS访问方式&#xff0c;只支持HTTP访问方式 自定义域名就先不用部署https证书。 配置完毕之后&#xff0c;将obs桶设置为公开的即可访问 如何在浏览…

Mysql 集群技术

Mysql在服务器中的部署方法 安装MySQL依赖性 rootmysql-node10 ~]# dnf install cmake gcc-c openssl-devel \ ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 下载并解压源码包 使用命令tar zxf mysql-boost-5.7.44.tar.gz进行解压 源码编译安…

硬件面试经典 100 题(81~90)题

81、请问下图电路中二极管 D1、D2 有什么作用&#xff1f; 在 Vi 输入电压接近于零时&#xff0c;D1、D2 给三极管 T1、T2 提供偏置电压&#xff0c;使 T1、T2 维持导通&#xff0c;以消除交越失真。 陈氏解释 这道题参见&#xff1a;硬件面试经典 100 题&#xff08;51~70 题…

【自动化】一共获取6600多公司信息【逆向】一页15还加密。

一、【逆向】一页15还加密。 二、【自动化】一共获取6600多公司信息 三、对于两种方式我喜欢第二种自动化 from DrissionPage import ChromiumPage, ChromiumOptions import time # chrome:version co = ChromiumOptions().set_paths(browser_path=r"C:\Users\lenovo\A…

【MySQL】MySQL表的增删改查(初阶)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 表内容操作 插入内容 按顺序插入 指定某些列插入 一次插入多行记录 插入时间 查询表内容 全列查询 指定列查询 指定表达式查询 用as取别名 ​编辑 去重查询 排序查询…

不同搜索引擎蜘蛛的功能、‌抓取策略与技术实现差异探究

搜索引擎作为互联网信息检索的重要工具&#xff0c;‌其核心功能依赖于背后的“蜘蛛”程序。‌这些蜘蛛程序负责访问互联网上的各种内容&#xff0c;‌并建立索引数据库&#xff0c;‌以便用户能够快速准确地找到所需信息。‌然而&#xff0c;‌不同搜索引擎的蜘蛛在功能、‌抓…

Axios介绍;前后端分离开发的介绍;YAPI的使用;Vue项目简介、入门;Elementui的使用;nginx介绍

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…

仿Muduo库实现高并发服务器——EventLoop模块

我刚开始看这个模块时&#xff0c;也是看不明白&#xff0c;什么是事件管理模块。 此时此刻&#xff0c;大领导的背影&#xff0c;还是那么清晰。结合故事模块&#xff0c;慢慢理。 EventLoop模块 成员&#xff1a; 绿色&#xff1a; 利用智能指针对new出来的对象进行管理&…

武汉流星汇聚:亚马逊赋能中小企业,跨境电商市场举足轻重地位稳

在全球经济一体化的浪潮中&#xff0c;跨境电商作为推动国际贸易的重要力量&#xff0c;正以前所未有的速度发展。在这场全球性的商业竞赛中&#xff0c;亚马逊以其卓越的市场表现、强大的技术实力和深厚的品牌影响力&#xff0c;稳居跨境电商市场的领头羊地位&#xff0c;其举…

多任务下载工具.exe

关键代码 void DownloadTask::StartDownload(const QUrl url,QFile *file,qint64 startPoint/* 0 */,qint64 endPoint/* -1 */) {if( NULL file )return;m_HaveDoneBytes 0;m_StartPoint startPoint;m_EndPoint endPoint;m_File file;//根据HTTP协议&#xff0c;写入RANGE…

Vue3基础2

1.Hooks 就是进行数据的封装&#xff0c;同一种类型的 数据 方法 计算属性 &#xff0c;放在一起 命名规范 use功能名称.ts 或.js 创建一个文件夹 hooks 1.useDog.ts import { reactive,onMounted } from "vue"; import axios from "axios";export def…

[数据集][目标检测]红外场景下车辆和行人检测数据集VOC+YOLO格式19069张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;19069 标注数量(xml文件个数)&#xff1a;19069 标注数量(txt文件个数)&#xff1a;19069 标…

SQL AI 工具:颠覆数据库管理与分析的创新力量

一、SQL AI 工具的兴起与发展 在当今数字化的时代&#xff0c;数据量呈现爆炸式增长&#xff0c;企业和个人对于高效管理和分析数据的需求日益迫切。传统的数据库管理和查询方式&#xff0c;对于非技术人员来说存在较高的门槛&#xff0c;操作复杂且耗时。这一背景为 SQL AI 工…

VMware安装Ubuntu20.04

1. 下载 整理的镜像链接 阿里网盘&#xff1a; 阿里云盘分享 提取码: l7y1 2. 新建虚拟机向导 选择自定义&#xff0c;然后下一步。 默认配置&#xff0c;下一步。 选择稍后安装操作系统&#xff0c;下一步。 选择操作系统Linux&#xff0c;版本Ubuntu64位&#xff0c;下一…

OCC笔记:Windows下OCC的编译

一、源码下载 进OCC官网下载https://dev.opencascade.org/release即可&#xff0c;或直接Clone它的Git库https://dev.opencascade.org/resources/git_repository&#xff0c;本文用的源码库版本为7.4.0&#xff08;我本机安装的VS2013&#xff0c;我又想用到AIS_ViewCube&…

AList嵌入动态验证码实现动态校验

前言 晓杰利用ALists创建了个网盘资源站&#xff0c;想着如何增加个动态验证码进行验证后才能进行访问下载&#xff0c;刚开始利用了固定的验证码&#xff0c;用户可以通过JS代码中进行绕过或直接拿到验证码&#xff0c;经过晓杰多次优化&#xff0c;最终版本支持动态获取验证…