首页 > 系统相关 >Nginx 服务 Rewrite

Nginx 服务 Rewrite

时间:2023-06-27 19:11:13浏览次数:111  
标签:服务 rewrite URL Rewrite Nginx 正则 location 跳转 匹配

目录

一、跳转场景

Nginx跳转需求的实现方式

需要安装 http_wihe rewrite 模块

使用 rewrite 进行匹配跳转

使用 if 匹配全局变量后跳转

使用 location 匹配再跳转

rewrite放在server{},if{},location{} 段中

location 只对域名后边的除去传递参数外的字符串起作用

对域名或参数字符串

使用 if 全局变量匹配

使用 proxy_pass 反向代理

二、正则表达式

用于精确匹配、过滤、筛选出需要的URL

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字[0-9]  \s:空白符  \w:任意单词字符包括下划线[a-zA-Z0-9_]
[list] :匹配list列表中的一个字符,例: go[ola]d, [abc]、 [a-z]、 [a-z0-9]、 [0-9]匹配任意一位数字
[^list] :匹配任意非list列表中的一个字符,例: [^0-9]、 [^A-20-9]、 [^a-z]匹配任意一位非小写字母
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符 

三、命令语法

1. 格式

rewrite <regex 正则> <replacement 跳转后的内容> [flag 支持的标记];

2. 标记说明

标记(flag) 说明
last 相当于Apache的 [L] 标记,表示完成rewrite(本条规则完成后,继续向下匹配新的 location URL规则,一般用在server和if当中)
break 本条规则匹配完成即终止,不再匹配后面的任何规则(一般用在location中)
redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新URL
permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新URL

break:和last类似,但是不会重新发起一次处理过程,而是直接放回处理结果

readirect:该标记表示当前当前规则匹配成功后立即进行重定向操作

permanent:该标记和redirect类似 但是永久性重定向

set:标记表示当前规则匹配成功设置一个变量,把变量传入下一条规则

比较 last break
使用场景 一般写在server和if中 一般使用在location中
URL匹配 不终止重新后的URL匹配(更变成新的URL) 终止重新后的URL匹配(URL不变)

四、location分类

1. 分类

类别 作用
location = patt{} 精确匹配
location patt{} 一般匹配
location ~ patt{} 正则匹配

2. 正则匹配的常用表达式

表达式 说明
~ 执行一个正则匹配,区分大小写(要么全是小写,要么全是大写)
~* 执行一个正则匹配,不区分大小写(大写、小写、大小写混合)
!~ 执行一个正则匹配,区分大小写不匹配
!~* 执行一个正则匹配,不区分大小写不匹配
^~ 普通字符匹配;使用前缀匹配。如果匹配成功,则不再匹配其他location
= 普通字符精确匹配,也就是完全匹配
@ 定义一个名为location,使用内部定向时

五、location 优先级

1. 标记优先级

标记(flag) 顺序
= 首先匹配精确匹配
^~ 其次是前缀匹配
* 其次是按文件中顺序的正则匹配
abc 然后匹配不带任何修饰的前缀匹配
/ 最后是交给通用匹配

location 匹配

先看 优先级:精确 > 前缀 > 正则 > 一般 > 通用

优先级相同:真正看上下顺序,上面的优先:一般看匹配长度,最长匹配的优先

精选、前缀、正则、一般都没有匹配到,最后再看通用匹配 一般匹配

2. 实例说明

(1)=:这是精确匹配符号,用于精确匹配请求 URI。例如,location = /path 将只匹配以 /path 结尾的请求URL

location = / {}

只匹配: http://www.test.com/

不会匹配:http://www.test.com/data

(2)/:这是通用匹配符号,表示将匹配所有请求。常常用作默认的 location 指令

location / {}		

可以匹配: http://www.test.com/data/

也可以匹配: http://www.test.com/data/abc

http://www.test.com/ABC

(3)/abc/:针对以 /abc/ 开头的请求 URI 进行处理

location /abc/ {}	

可以匹配: http://www.test.com/abc

http://www.test.com/abc/def

注:匹配之后,还需要继续往下匹配其它的 location,只有其它 location 后面的正则表达式没有匹配到时,才会采样这一条(因为正则表达式优先级匹配比通用匹配高)

(4) ^~: 这是前缀匹配符号,表示如果请求 URI 的前缀与该 location 指令中定义的 URI 匹配,将停止搜索其他匹配项并立即使用此 location 指令

location ^~ /abc/ {}	

可以匹配: http://www.test.com/abc/abc

不可以匹配:http://www.test.com/abc/def

(5)~~*: 这是正则匹配符号,表示后面跟随一个正则表达式来匹配请求 URI。~ 表示区分大小写的正则匹配,而 ~* 则表示不区分大小写的正则匹配

location ~* \.(gif|jpg|jpeg)$ {}
location ^~ /images/ {}

匹配所有以 .gif、.jpg或 .jpeg 结尾的请求

然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则

六、必选三个规则

1. 第一个必选规则

直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,比如说官网。
可以是一个静态首页,也可以直接转发给后端应用服务器

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

2. 第二个必选规则

处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

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


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

3. 第三个必选规则

通用规则,比如用来转发带.php、.jsp后缀的动态请求到后端应用服务器非静态文件,请求就默认是动态请求

location / {
    proxy_pass http://www.Server.com;
}

七、rewrite 和 location 比较

1. 相同点

都可以实现跳转

2. 不同点

rewrite 是在统一域名内更改获取资源的路径

location 是对一类路径做出控制访问或反向代理,还可以用 proxy_pass反向代理到其它服务器

3. rewrite 会写在location 中执行顺序

① 执行server块里面的rewrite指令

② 执行location匹配

③ 执行选定 location 中的rewrite指令

八、总结

  1. 实现 Nginx 跳转的方式包括:
    • 使用 rewrite 进行匹配跳转。
    • 使用 if 匹配全局变量后跳转。
    • 使用 location 匹配再跳转。
  2. 在 Nginx 的配置中,rewrite 可以放在 server{}、if{}、location{} 段中。
  3. 正则表达式在 URL 匹配中起着精确匹配、过滤和筛选的作用,
  4. rewrite 命令的语法格式为:rewrite <regex 正则> <replacement 跳转后的内容> [flag 支持的标记]。
  5. 标记(flag)的说明:
    • last:相当于 Apache 的 [L] 标记,表示完成 rewrite 后继续向下匹配新的 location URL 规则。
    • break:本条规则匹配完成即终止,不再匹配后面的任何规则。
    • redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址,爬虫不会更新 URL。
    • permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址,爬虫会更新 URL。
  6. location 分类:
    • location = patt{}: 精确匹配。
    • location patt{}: 一般匹配。
    • location ~ patt{}: 正则匹配。
  7. location 优先级:
    • 精确匹配 > 前缀匹配 > 正则匹配 > 一般匹配 > 通用匹配。
    • 如果优先级相同,则根据上下文顺序决定。
  8. 必选的三个规则:
    • 第一条规则是精确匹配网站根,用于加速处理常见的网站首页访问。
    • 第二条规则用于处理静态文件请求,可以使用目录匹配或后缀匹配。
    • 第三条规则用于转发动态请求给后端应用服务器,例如带有 .php 或 .jsp 后缀的请求。
  9. rewrite 和 location 的比较:
    • rewrite 是在统一域名内更改获取资源的路径。
    • location 是对一类路径做出控制访问或反向代理,也可以用 proxy_pass 实现反向代理到其他服务器。
    • rewrite 可以写在 location 中,执行顺序是先执行 server 块里面的 rewrite 指令,然后执行选定 location 中的 rewrite 指令。

标签:服务,rewrite,URL,Rewrite,Nginx,正则,location,跳转,匹配
From: https://www.cnblogs.com/m-zhuang/p/17509730.html

相关文章

  • Linux安装与配置FTP服务
    1、FTP安装与配置1.1、FTP安装一般使用yum直接在线安装#在线安装FTPyuminstall-yvsftpd安装完成后查看ftp状态#查看ftp状态systemctlstatusvsftpd.service#启动ftp状态重启:restart,停止:stop,开机自启:enable,关闭开机自启:disablesystemctlstartvsftpd.service1.2......
  • 一图看懂CodeArts Board 5大特性,带你玩转看板服务
    华为云看板服务CodeArtsBoard,通过构建研发效能度量体系,实现软件研发过程的可视化、软件交付的可管理可跟踪可量化,及时识别研发过程的堵塞点和改进点,通过数据驱动运营和治理,不断提升企业的软件能力和研发效能。 ......
  • 【转】【C#】调用链接服务器的存储过程
    XXX.codeDB.dbo.SP_XXXX执行时,存储过程按这个格式如果遇到问题:拒绝了对对象(数据库'codeDB',架构'dbo')的EXECUTE权限。对链接服务器右键-属性-安全性,看到连接使用的用户后,在目标数据库里找到对应数据库-属性-权限-把对应用户在右下角表格里的执行勾......
  • 计讯物联定制服务再升级,助力千行百业万物互联
    随着物联网行业的迅猛发展,行业应用需求趋向于个性化。面对这样的发展趋势,计讯物联打破传统运营管理方式,立足客户需求,为广大客户提供定制化服务,以此提高客户满意度及忠诚度。同时,为在同行竞争中脱颖而出,计讯物联汇聚人才力量全力打造一支专业可靠的技术研发团队,并提供多元化定制服......
  • FTP服务器搭建
    创建FTP服务器vimftp_server.sh#!/bin/bash#安装vsftpdyuminstall-yvsftpd#启动vsftpd服务systemctlstartvsftpd#设置开机自启动systemctlenablevsftpd#配置防火墙firewall-cmd--permanent--add-service=ftpfirewall-cmd--reload#重启vsftpd服......
  • [SUCTF 2019]Pythonginx
    源码:@app.route('/getUrl',methods=['GET','POST'])defgetUrl():url=request.args.get("url")#获取urlhost=parse.urlparse(url).hostname#获取主机名例如:http://www.baidu.com/index.php?a=111会读取到www.baidu.com......
  • 嘉为蓝鲸入选《信息技术服务运维工具名录》及《IT服务工具图谱》
    6月15-16日,由ITSS分会举办的信息技术服务工具产品标准制修订及技术研讨工作会议在京召开,会上重磅发布《中国信息技术服务运维工具名录》及《IT服务工具图谱》最新版。运维工具名录和工具图谱的研制目的是为了充分发挥标准对IT服务工具行业发展的引领作用。包含了两方面的内容,一是推......
  • 前端项目部署到nginx
    前端项目部署到nginx配置好本地的nodejs环境切换到前端项目所在的文件目录以命令行的方式运行npmrunbuild命令命令执行成功会生成dist文件夹,将文件夹中的内容压缩上传到nginx_html数据卷对应的目录下执行解压命令unzipdist.zip删除压缩包rm-rfdist.zip即可访问nginx......
  • 网工内推 | 服务商,五险一金,大专以上即可
    01中盈优创资讯科技有限公司招聘岗位:网络工程师职责描述:1.按照项目经理要求完成IP网络集成和优化类项目工程文档编写;2.完成IP网络集成优化实施项目的网络需求沟通、安装调试、网络割接方案编写及实施和验收、维护工作;3.按需要做好项目相关的客户交流和技术培训工作;4.部门交......
  • ubuntu搭建python3.10.7(服务器第一步)
    一安装python更新Ubuntu软件源和依赖(建议操作)1-sudoaptupdate2-sudoaptinstallbuild-essentialzlib1g-devlibncurses5-devlibgdbm-devlibnss3-devlibssl-devlibreadline-devlibffi-dev3-下载安装包:wgethttps://www.python.org/ftp/python/3.10.7/Python-3.10.7......