Nginx ---- Rewrite 和具体应用场景
一:Rewrite 跳转场景
-
URL看起来更规范、合理
-
企业会将动态URL地址伪装成静态地址提供服务
-
网址换新域名后,让旧的访问跳转到新的域名上
-
服务端某些业务调整
二:Rewrite 实用场景
1、Nginx跳转需求的实现方式
-
使用rewrite进行匹配跳转;
-
使用if匹配全局变量后跳转;
-
使用location 匹配再跳转
2、rewrite放在 server { },if { },location{ }段中;
3、对域名或参数字符串
-
使用 if 全局变量匹配;
-
使用 proxy_pass 反向代理
4、Rewrite 命令
rewrit <regex> <replacement> [flag];
'正则' ‘跳转后的内容’ ‘rewrite支持的flag标记’
flag标记说明
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSHbsfkI-1577629124015)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577420069748.png)]](https://i-blog.csdnimg.cn/blog_migrate/84e2471e2fff70d7bdd6796479c959dc.png)
三:Location 分类
location = patt {} [精准匹配
location patt {} [一般匹配]
location ~ patt {} [正则匹配]
1、正则表达式的常用表达式
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fo2efcCZ-1577629124016)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577420630078.png)]](https://i-blog.csdnimg.cn/blog_migrate/5952c4dad5c7069bf6c04bdfdb5dcc22.png)
2、location优先级
-
相同类型的表达式,字符串长的会优先匹配
-
按优先级排列
-
=类型
-
^~类型表达式
-
正则表达式(和*) 类型
-
常规字符串匹配类型,按前缀匹配
-
通用匹配(/),如果没有其它匹配,任何请求都会匹配到
-
3、比较rewrite和location
-
相同点 : 都能实现跳转
-
不同点
-
rewrite是在同一域名内更改获取资源的路径
-
location是对一类路径做控制访问或反向代理,还可以proxy_ pass到其他机器
-
rewrite会写在location里,执行顺序
-
执行server块里面的rewrite指令
-
执行location匹配
-
执行选定的location中的rewrite指令
四:应用场景
1、基于域名的跳转
示例:公司旧域名为www.do.com ,因业务需求有变更,需要使用新域名www.new.com 代替。 不能废除旧域名,从旧域名跳转到新域名,且保持参数不变。
1、下载官方源(rpm源)
[root@localhost ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、关闭防火墙, 直接安装nginx 和 bind
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install nginx bind -y
3、设置跳转域名,修改nginx配置文件
[root@localhost ~]# cd /etc/nginxconf.d/default.conf
[root@localhost conf.d]# vim default.conf
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZGy66E5-1577629124017)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577426889400.png)]](https://i-blog.csdnimg.cn/blog_migrate/4c8822e65c16c44a3a6dbd355d2c1fe3.png)
[root@localhost conf.d]# vim /etc/named.rfc1912.zones
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfDC72Nh-1577629124018)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577427489451.png)]](https://i-blog.csdnimg.cn/blog_migrate/fae9770b11781f40d1656140f2700610.png)
[root@localhost conf.d]# cd /var/named
[root@localhost named]# ls
data named.ca named.localhost slaves
dynamic named.empty named.loopback
[root@localhost named]# cp -p named.localhost do.com.zone
[root@localhost named]# vim do.com.zone
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5WA1ghGi-1577629124018)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577427685925.png)]](https://i-blog.csdnimg.cn/blog_migrate/dfb1a30b336f8f98e0b6fe7dbba5b411.png)
[root@localhost named]# cp -p do.com.zone new.com.zone
[root@localhost named]# systemctl start named ‘开启named服务’
[root@localhost named]# systemctl start nginx ‘开启nginx服务’
在win10 客户机验证,输入新的域名。如果输入旧的域名会自动跳转到新的域名。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPZKJX4l-1577629124019)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577434625265.png)]](https://i-blog.csdnimg.cn/blog_migrate/f9e9387b10378b5b5ba0b1d6dc0a7318.png)
2、基于客户端IP访问跳转
示例:今天公司业务版本上线,所有的IP访问任何内容都显示一个固定维护页面,只有公司IP访问正常。(公司IP地址:192.168.34.159 PC客户端地址 :192.168.34.146)
1、修改nginx的配置文件
[root@localhost ~]# vim /etc/nginx/conf.d/default.conf ‘进入配置文件’
[root@localhost ~]# systemctl start nginx ‘开启nginx服务’

2、给abc.html添加自定义页面内容
[root@localhost html]# vim abc.html
<html></head>
<meta charset="utf-8">
<h1>抱歉,网站维护中</h1>
</body></html>
通过公司的IP地址访问:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qa6Uyf30-1577629124020)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577618888962.png)]](https://i-blog.csdnimg.cn/blog_migrate/8f89b33a08003f173d922f9d3daa0687.png)
通过客户端访问:

3、基于旧域名跳转到新域名 并加目录
示例:公司由于业务变更,公司的域名为 bbs.do.com 变更为 www.do.com
1、在nginx配置文件中添加代码
[root@localhost html]# vim /etc/nginx/conf.d/default.conf
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSOZAQ1n-1577629124022)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577604124978.png)]](https://i-blog.csdnimg.cn/blog_migrate/a394bba1980650936b048446932a5df2.png)
[root@localhost html]# cd /var/named
[root@localhost named]# vim do.com.zone
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYWrBICl-1577629124022)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577620216763.png)]](https://i-blog.csdnimg.cn/blog_migrate/4e6ca9d1aa29894eaa7fc9e532860bac.png)
[root@localhost conf.d]# systemctl restart named
[root@localhost conf.d]# systemctl restart nginx
[root@localhost conf.d]# echo "nameserver 192.168.34.160" > /etc/resolv.conf
2、 在centos7 中访问输入bbs.do.com/post 会自动转换成 www.do.com/post , 此时域名跳转后的参数没有变还是bbs

4、基于参数匹配的跳转
示例:现在访问http://www.do.com/100-(100|200) -100.html 跳转到 http://www.do.com 页面。
1、修改nginx的主配置文件 ,在server段中添加一个 if 语句判断,匹配参数
[root@localhost named]# vim /etc/nginx/conf.d/default.conf
'添加这一段'
if ($request_uri ~ ^/100-(100|200)-(\d+).html$){ ‘其中d代表数字 +代表数字匹配一次或多次 ’
rewrite (.*) http://www.do.com permanent; ‘匹配参数一次或多次,跳转到指定域名’
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qHCrGotR-1577629124024)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577623328658.png)]](https://i-blog.csdnimg.cn/blog_migrate/49eec5f787304b42644505450d50352f.png)
[root@localhost named]# vim do.com.zone ‘DNS 解析www’
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LaTAFZxF-1577629124024)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577623361194.png)]](https://i-blog.csdnimg.cn/blog_migrate/441469045d65b387ded5a02b1a4ef729.png)
[root@localhost named]# systemctl restart named
[root@localhost named]# systemctl restart nginx '开启服务'
2、在centos7 中验证 ,输入http://www.do.com/100-100-100.html 自动跳转到 www.do.com
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dSqvIj54-1577629124025)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577623166390.png)]](https://i-blog.csdnimg.cn/blog_migrate/6047297fe7553c1802c003cad4347705.png)
5、基于目录下所有php结尾的文件跳转
示例:访问http://www.do.com/upload/1.php 时,自动跳转到首页www.do.com 。
1、修改nginx 配置文件
[root@localhost named]# vim /etc/nginx/conf.d/default.conf
location ~* /upload/.*\.php$ {
rewrite (.+) http://www.do.com permanent;
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rIwxbWLU-1577629124026)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577628125241.png)]](https://i-blog.csdnimg.cn/blog_migrate/0f6cb567219cd634dea3f83e2c0e8883.png)
2、在win10客户端验证,输入http://www.do.com/upload/c.php 会自动跳转到 www.do.com
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAujL35F-1577629124026)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577628004539.png)]](https://i-blog.csdnimg.cn/blog_migrate/b9309f450b661eb4b26b0d35815adc3d.png)
6、基于最普通一条 url 请求的跳转
示例:在网页上访问一个具体的网址http://www.do.com/abc/test.html , 会自动跳转到首页 www.do.com 。
1、修改nginx主配置文件,server段中添加一个location 段,匹配条件跳转
[root@localhost ~]# vim /etc/nginx/conf.d/default.conf
location ~* ^/abc/test.html{ '指定一个页面'
rewrite (.+) http://www.accp.com permanent; ‘自动跳转到首页’
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6QUTx9yG-1577629124028)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577628927815.png)]](https://i-blog.csdnimg.cn/blog_migrate/a711e7dd07434ef6b34cfe8ab1e4b794.png)
403

被折叠的 条评论
为什么被折叠?



