nginx ---rewrite规则及应用

rewite跳转

nginx通过ngx_http_rewrite_module模块实现
支持URL重写、支持if条件判断,但是不支持else
跳转时,循环最多可以执行10次,超过后nginx将返回500错误

Rewite使用场景

  • 使用rewrite进行匹配跳转

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

  • 使用location匹配再跳转
    rewrite放在server{}、if{}、location{} 段中
    对域名或参数字符串

  • 使用if全局变量匹配

  • 使用proxy_pass反向代理

rewrite命令
rewrite [flag];
flag

  • last 相当于apache的【L】标记,表示完成rewrite
  • break 本条规制匹配完成即终止,不在匹配后面的任何规则
  • redirect 返回302零时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更 新url
  • permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url

last和break比较

  • last 一般写在server中和if中 USR匹配 不终止重写后的url匹配
  • bresk 一般使用在location中 USR匹配 终止重写后的url匹配

## location分类
分类

  • location = patt {} 【精确匹配】

  • location patt {} 【一般匹配】

  • location ~ patt {} 【正则匹配】
    正则匹配的常用表达式

  • ~ 执行一个正则匹配,区分大小写

  • ~* 执行一个正则匹配,不区分大小写

  • !~ 执行一个正则匹配,区分大小写不匹配

  • !~* 执行一个正则匹配,不区分大小写不匹配

  • ^~ 普通字符匹配;使用前缀匹配。如果匹配成功,则不再匹配其他location

  • = 普通字符精确匹配。也就是完全匹配

  • @ 定义一个命名的location,使用在内部定向时

location优先级
相同类型的表达式,字符串长的会优先匹配
优先级排序

  • = 类型
    -^~类型表达式
  • 正则表达式(*)类型
  • 常规字符匹配类型,按前缀匹配
  • 通用匹配(/),如果没有其他匹配,任何请求都会匹配到

rewrite与location比较
相同点

  • 都能实现跳转
    不同点

  • rewrit是在同一域名内更改获取资源的路径

  • location是对一类路劲做控制访问或反向代理,还可以proxy_pass到其他机器
    rewrite会写在location里,执行顺序

  • 执行server块里面的rewrite指令

  • 执行location匹配

  • 执行选定的location中的rewrite指令

location优先级的实例

  • location ^~/lmages/ {
    [ configuration E] 以/images/ 开头的地址,匹配符合后,停止往下匹配
    }
  • location ~* .(gif|jpg|jpeg)$ {
    [ configuration F ] 匹配所有以gif,jpg或jpeg结尾的请求,/images/下的图片会被
    } 【configuration E 】处理,因为^~的优先级更高
  • location ~ /images/abc {
    [ configuration G] 最长字符匹配到/images/abc, 优先级最低
    }
  • location ~ /images/abc/1.html {
    [ configuration i] 如果和正则~ /images/abc/1.html相比,正则优先级更高
    }

具体应用场景

  1. 基于域名跳转
    实验环境:公司应某些原因将旧域名www.accp.com 更换成新域名www.yun.com
    要求:旧域名不能废除、访问旧域名可以跳转到新域名上 参数不变
    具体实验步骤如下:
    使用yum进行安装
    安装源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

直接用yum安装

yum install nginx -y

安装DNS

yum install bind -y
vim /etc/named.conf
vim/etc/named.rfc1912.zones
cp -p /var/named/named.localhost /var/named/accp.com.zone
vim /var/named/accp.com.zone 
cp -p /var/named/accp.com.zone /var/named/yun.com.zone

启动服务关闭防火墙

systemctl start named
systemctl start nginx
systemctl stop firewalld.service
setenforce 0

查看域名www.accp.com
在这里插入图片描述

发布了44 篇原创文章 · 获赞 10 · 访问量 1002

猜你喜欢

转载自blog.csdn.net/weixin_45725244/article/details/103730795