Nginx----Rewrite和具体应用场景

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)]

三:Location 分类

​ location = patt {} [精准匹配
​ location patt {} [一般匹配]
​ location ~ patt {} [正则匹配]

1、正则表达式的常用表达式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fo2efcCZ-1577629124016)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577420630078.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)]

[root@localhost conf.d]# vim /etc/named.rfc1912.zones

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfDC72Nh-1577629124018)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577427489451.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)]

[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)]

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)]

通过客户端访问:
在这里插入图片描述

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)]

[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)]

[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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W4VBN9n3-1577629124023)(C:\Users\xumin\AppData\Roaming\Ty

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)]

[root@localhost named]# vim do.com.zone      ‘DNS 解析www’

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LaTAFZxF-1577629124024)(C:\Users\xumin\AppData\Roaming\Typora\typora-user-images\1577623361194.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)]

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)]

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)]

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)]

2、 在网页上访问http://www.do.com/abc/test.html ,会自动跳转到 www.do.com 。
发布了62 篇原创文章 · 获赞 11 · 访问量 2354

猜你喜欢

转载自blog.csdn.net/XuMin6/article/details/103758756