Linux4.8Nginx Rewrite

文章目录

  • 计算机系统
    • 5G云计算
      • 第六章 LINUX Nginx Rewrite
        • 一、Nginx Rewrite 概述
          • 1.常用的Nginx 正则表达式
          • 2.rewrite和location
          • 3.location
          • 4.实际网站使用中,至少有三个匹配规则定义
          • 5.rewrite
          • 6.rewrite 示例

计算机系统

5G云计算

第六章 LINUX Nginx Rewrite

一、Nginx Rewrite 概述

1.常用的Nginx 正则表达式
正则表达式符号说明
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或多次。如“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_]
{n}重复 n 次
{n,}重复 n 次或更多次
{n,m}重复 n 到 m 次
[]定义匹配的字符范围
[c] :匹配单个字符 c
[a-z]匹配 a-z 小写字母的任意一个
[a-zA-Z0-9]匹配所有大小写字母或数字
()表达式的开始和结束位置
|或运算符
2.rewrite和location

从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器

rewritelocation
对访问的域名或者域名内的URL路径地址重写对访问的路径做访问控制或者代理转发
3.location
location种类说明
精准匹配location = / {…}
一般匹配location / {…}
正则匹配location ~ / {…}
location 常用的匹配规则说明
=进行普通字符精确匹配,也就是完全匹配
^~表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 正则匹配location
~区分大小写的匹配
~*不区分大小写的匹配
!~区分大小写的匹配取非
!~*不区分大小写的匹配取非
location 优先级
首先精确匹配 =
其次前缀匹配 ^~
其次是按文件中顺序的正则匹配 *
然后匹配不带任何修饰符的一般前缀匹配
最后是交给 / 通用匹配

优先级总结
(location = 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分前缀路径) > (location /)

location 匹配
首先看 优先级:精确= > 前缀^~ > 正则~,~* > 一般 > 通用/

在没有精准匹配的情况下,先看前缀匹配的长度,然后根据最长的前缀匹配的优先级去确定是否再去看其它正则匹配location,如果最长的前缀匹配带有 ^~不再看其它正则匹配location,如果最长的前缀匹配是没有修饰符的一般匹配则会再看其它正则匹配location

前缀匹配看长度,最长的优先匹配
正则匹配看上下顺序,由上往下依次匹配,当有匹配成功时候,停止匹配,按当前匹配规则处理请求

只有在精准、前缀、正则、一般 都没有匹配到的时候才会看通用匹配

4.实际网站使用中,至少有三个匹配规则定义

1)第一个必选规则

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

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

2)第二个必选规则

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

location ^~ /static/ {root /webroot/;
}location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}

3)第三个必选规则

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

location / {proxy_pass http://tomcat_server;
}
5.rewrite

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用
例如 http://www.kb.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写

1)rewrite跳转实现

Nginx

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

跳转

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

PCRE支持

perl兼容正则表达式的语法规则匹配

重写模块 set 指令

创建新的变量并设其值

2)rewrite 执行顺序

rewrite 执行顺序
执行 server 块里面的 rewrite 指令
执行 location 匹配
执行选定的 location 中的 rewrite 指令

3)语法格式

rewrite <regex> <replacement> [flag]regex :表示正则匹配规则
replacement :表示跳转后的内容
flag :表示 rewrite 支持的 flag 标记###flag标记说明###
last :本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中
break :本条规则匹配完成即终止,终止重写后的url匹配,一般使用在location中
redirect :返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent :返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
6.rewrite 示例

1)基于域名的跳转

现在公司旧域名www.kb.com有业务需求变更,需要使用新域名www.benet.com代替,但是旧域名不能废除,需要跳转到新域名上,而且后面的参数保持不变

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.kb.com;		###域名修改	charset utf-8;access_log  /var/log/nginx/www.kb.com-access.log;		###日志修改location / {#添加域名重定向if ($host = 'www.kb.com'){						###$host为rewrite全局变量,代表请求主机头字段或主机名rewrite ^/(.*)$ http://www.benet.com/$1 permanent;	         ###$1为正则匹配的内容,即“域名/”之后的字符串}root   html;index  index.html index.htm;}
}echo "192.168.58.60 www.kb.com www.benet.com" >> /etc/hosts
systemctl restart nginx
浏览器输入模拟访问 http://www.kb.com/test/1.html(虽然这个请求内容是不存在的)
会跳转到www.benet.com/test/1.html,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.58.60访问正常

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.kb.com;		###域名修改	charset utf-8;access_log  /var/log/nginx/www.kb.com-access.log;		###日志修改###设置是否合法的IP标记set $rewrite true;							###设置变量$rewrite,变量值为boole值true###判断是否为合法IPif ($remote_addr = "192.168.58.60"){		###当客户端IP为192.168.58.60时,将变量值设为false,不进行重写set $rewrite false;}###除了合法IP,其它都是非法IP,进行重写跳转维护页面if ($rewrite = true){						###当变量值为true时,进行重写rewrite (.+) /weihu.html;				###将域名后边的路径重写成/weihu.html后转发,例如www.kb.com/weihu.html}location = /weihu.html {root /var/www/html;						###网页返回/var/www/html/weihu.html的内容}location / {root   html;index  index.html index.htm;}
}mkdir -p /var/www/html/
echo "<h1>We are maintaining now!</h1>" > /var/www/html/weihu.html
systemctl restart nginx
只有 IP 为 192.168.58.60 能正常访问,其它地址都是维护页面--------------------------------------------------------
如果rewrite (.+) /weihu.html; 换成rewrite (.+) /weihu.html permanent; 的话,若不是 192.168.58.60 的主机访问会使浏览器修改请求访问的 URL 成 http://www.kb.com/weihu.html 再请求访问,这样就会进入一直在 rewrite 的死循环,访问请求会一直被重写成 http://www.kb.com/weihu.html 再请求访问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)基于旧域名跳转到新域名后面加目录

现在访问的是 http://bbs.kb.com/post/,现在需要将这个域名下面的访问都跳转到http://www.kb.com/bbs/post/

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  bbs.kb.com www.kb.com;		###域名修改	charset utf-8;access_log  /var/log/nginx/www.kb.com-access.log;###添加location /post {rewrite (.+) http://www.kb.com/bbs$1 permanent;		###这里的$1为位置变量,代表/post}location / {root   html;index  index.html index.htm;}
}mkdir -p /usr/local/nginx/html/bbs/post
echo "this is 1.html"  >> /usr/local/nginx/html/bbs/post/1.html
echo "192.168.58.60 bbs.kb.com"  >> /etc/hosts
systemctl restart nginx
使用浏览器访问 http://bbs.kb.com/post/1.html 跳转到 http://www.kb.com/bbs/post/1.html

在这里插入图片描述
在这里插入图片描述

4)基于参数匹配的跳转

现在访问http://www.kb.com/100-(100|200)-100.html 跳转到http://www.kb.com页面

vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  www.kb.com;		###域名修改	charset utf-8;access_log  /var/log/nginx/www.kb.com-access.log;if ($request_uri ~ ^/100-(100|200)-(\d+).html$) {rewrite (.+) http://www.kb.com permanent;}location / {root   html;index  index.html index.htm;}
}-------------------------------------------------
$request_uri:包含请求参数的原始URI,不包含主机名,如:http://www.kb.com/abc/bbs/index.html?a=1&b=2 中的 /abc/bbs/index.php?a=1&b=2
$uri:这个变量指当前的请求URI,不包括任何参数,如:/abc/bbs/index.html
$document_uri:与$uri相同,这个变量指当前的请求URI,不包括任何传递参数,如:/abc/bbs/index.html
-------------------------------------------------systemctl restart nginx
使用浏览器访问 http://www.kb.com/100-200-100.html 或 http://www.kb.com/100-100-100.html 跳转到http://www.kb.com页面
s/index.php?a=1&b=2
$uri:这个变量指当前的请求URI,不包括任何参数,如:/abc/bbs/index.html
$document_uri:与$uri相同,这个变量指当前的请求URI,不包括任何传递参数,如:/abc/bbs/index.html
-------------------------------------------------systemctl restart nginx
使用浏览器访问 http://www.kb.com/100-200-100.html 或 http://www.kb.com/100-100-100.html 跳转到http://www.kb.com页面

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Apache 日志解析和分析工具

ApacheWeb服务器在企业中广泛用于托管其网站和Web应用程序。Apache 服务器生成的原始日志提供了有关 Apache 服务器托管的网站如何处理用户请求以及访问您的网站时经常遇到的错误的宝贵信息。 什么是 Apache 日志 Apache 日志包含 Apache Web 服务器处理的所有事件的记录 - 从…

C++ Release版软件 程序运行丢失MSVCR120D.dll的解决方法

软件在Debug模式下运行时正常的&#xff0c;但是切换到Release模式下就弹出错误提示&#xff1a;无法启动此程序&#xff0c;因为计算机中丢失MSVCR120D.dll。尝试重新安装该程序以解决此问题。 解决方法如下&#xff1a; 1、项目“属性”---->配置给为“Release”版本----&…

vmware 详细安装教程

一.VM是什么&#xff1f; VMware Workstation是一个“虚拟 PC”软件。它使你可以在一台机器上同时运行二个或更多 Windows、DOS、LINUX 系统。与“多启动”系统相比&#xff0c;VMWare 采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统&#xff0c;在系统切换时需要…

mt管理器逆向了解安卓----【mt管理器介绍】

mt管理器介绍 ps:此教程完全适合新手&#xff0c;如已了解请略过

apktool助手转java_apktool助手

Apktool助手可以给软件加注册机、改包名、编译和反编译&#xff0c;功能强大。Apktool助手帮助您在手机端也能对apk文件进行修改&#xff0c;喜欢此款Apktool助手手机版&#xff0c;想要下载使用的朋友不要错过。 软件特色 ApkTool Box配合工具包可以轻轻松松的实现apk&#xf…

剑网3指尖江湖开局门派选TA最好 叉叉助手伴你快意江湖

万众期待的《剑网3&#xff1a;指尖江湖》将于6月12日上线&#xff01;在国创武侠网游界&#xff0c;剑网三的大名可谓无人不知无人不晓。该作是西山居以端游IP研发的一款角色扮演类手游&#xff0c;有别于大部分角色扮演游戏的单人物多职业套路&#xff0c;此款游戏的最大亮点…

全民小镇ios越狱用户叉叉助手辅助刷金币攻略

接下来再来看看全民小镇ios刷金币&#xff0c;里面包含有单一的叉叉辅助刷金币教程。这个时候我们切换到八门神器保证程序全民飞机大战于搜索框内输入点击会出来一批的数据还不能确定哪个数值是支持金币需要再进行筛选。其实修改金币之类的最常用的就是烧饼修改器以及八门神器了…

叉叉开发文档

xxzhushou 2019-04-03 14:50 字数 66259 阅读 400563 叉叉脚本开发手册 叉叉脚本 引擎版本&#xff1a;1.9.314 叉叉脚本开发手册 前言开发文件夹路径 本地脚本存放路径公共文件夹路径截图存放路径日志文件路径脚本开发实用技巧&#xff08;持续更新&#xff09;叉叉脚本定制…

安卓通讯录操作插件

包含获取通讯录、添加联系人、修改联系人、删除联系人、拨打电话、获取通话记录、添加通话记录、删除通话记录、获取短信记录、发送短信、获取电话号码运营商和归属地等功能。 地址&#xff1a;安卓通讯录操作插件 - DCloud 插件市场 所需权限 复制代码 <!-- 读写联系人…

android+mat工具下载,MAT助手下载-MAT助手下载V3.3安卓版-西西软件下载

MAT助手是一款专门为mat用户打造的手机软件&#xff0c;用户可以使用这款软件对应用包的文件名进行修改&#xff0c;对于mat用户来说绝对是一个小巧而实用的神器&#xff0c;操作也特别简单&#xff0c;小白用户勿入&#xff0c;需要的可以来西西下载MAT助手进行体验 MAT助手介…

4、叉叉助手逆向分析续集--模拟实现游戏插件框架--再扩展到脱壳机

这里以HOOK程序启动后调用天天星联盟为例&#xff0c;下面是2014年4月30日抠出来的天天星联盟插件APK代码&#xff1a; package com.xxAssistant.UI; import android.app.Activity; import android.content.Context; import android.util.Log; import android.widget.RelativeL…

软考A计划-电子商务设计师-复习要点

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

安装mt工具箱离线版本

安装mt工具箱 如果安装成功&#xff0c;那么恭喜你&#xff0c;如果安装失败&#xff0c;请看我后面的。 mt2.0 离线包不建议安装了&#xff0c;主要是插件中心挂了&#xff0c;喜欢折腾的可以参照我的文档&#xff0c;不喜欢折腾的&#xff0c;就不要折腾了 后记&#xff1a…

MT平台下载

2007-09-28 14:12:50 MetaTrader 4 模拟/真实平台下载请下载()mt4setup.exe, 3.0mb文件到你的电脑&#xff0c;并按照映屏上的指示安装好。在你第一次使用这个平台的时候&#xff0c;你会见到一个自动弹出的注册表窗口&#xff0c;请你填好这个表格&#xff0c;然后系统就会马上…

叉叉助手停运有什么替代的_亚马逊全球开店助手将停止服务!卖家:终究是错付了...

最近&#xff0c;亚马逊可谓是新规频出。上个礼拜&#xff0c;亚马逊发布“自2020年9月1日开始&#xff0c;商家名称和地址将显示在卖家资料页面”上的通知。随后&#xff0c;后台的“销售业绩”版块也悄悄换至下图的位置&#xff0c;让卖家很不适应。 一系列突如其来的操作让卖…

6、XPOSED二、叉叉助手框架--用XPOSED实现

继《 xposed框架初探》之后&#xff0c;编写一个小小的demo应用&#xff0c;刚好之前分析叉叉的游戏辅助框架(参考《 叉叉助手逆向分析续集--模拟实现游戏插件框架--再扩展到脱壳机 》&#xff0c; 我们是用了libsubstrate的hook框架来完成的 )&#xff0c;这次就用XPOSED实现一…

2、叉叉助手逆向分析(上)

描述&#xff1a;主要讲解如何有条例地逆向分析出软件的主要逻辑。 工具&#xff1a;APKIDE&#xff0c;JD-GUI 方法&#xff1a;顺藤摸瓜&#xff0c;smali代码主要看invoke关键函数调用&#xff0c;定位到相应的类中看代码。 使用APKIDE反编译xxzhushou_android.apk。 各个游…

3、叉叉助手逆向分析(下)

plugin/117/xxFknsg.apk --ui-name:com/xxAssistant/FknsgUI/xxMain --activity-name:com/babeltimes/main/MainActivity --so-path:/data/data/com.xxAssistant/app_plugin/117/libxxfknsg.so 我们将手机里的apk提取出来&#xff1a;com.babeltime.fknsango_360-1.apk&#xf…

android 我叫mt 插件,叉叉我叫MT助手

叉叉mt助手是我叫mt的安卓版辅助插件&#xff0c;提供加速、自动点箭头、自动点异常、自动售卡、买体力、一键收/送体力、副本计数等功能&#xff0c;只需要一键精英就已经OK&#xff0c;叉叉mt助手旨在为玩家节省时间&#xff0c;提高游戏效率&#xff0c;给玩家最贴心的服务&…

使用GCN根据颗粒图像预测对应性能

之前做一个小实验写的代码&#xff0c;本想创建个git repo&#xff0c;想了想好像没必要&#xff0c;直接用篇博文记录一下吧。 对应资源 &#xff1a; https://download.csdn.net/download/rayso9898/87865298 0. 大纲 0.1 代码说明 dataGeneration.py -> RSA生成n张图像&…