Nginx---location匹配 、rewrite跳转,弄他一波

一、Nginx

1、常见的正则表达式

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

2、location

location大致可以分为三类

  • 精准匹配:location = / {}
  • 一般匹配:location / {}
  • 正则匹配:location ~ / {}

location常见的匹配规则

在这里插入图片描述

location优先级

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

location示例说明

(1)location = / {}
=为精确匹配/,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配
再例如location = /abc,则只匹配/abc,/abc/或/abcd不匹配,若 location /abc,则即匹配/abc、/abcd/同时也匹配/abc/。

(2)location / {}
因为所有的地址以/开头,所以这条规则将匹配到所有请求 如访问 / 和 /data,则/匹配,/data也是匹配的
但若后面是正则表达式和最长字符串优先匹配(最长匹配)

(3)location /documents/ {}
匹配任何以/documents/开头的地址,匹配符合以后,还要继续往下搜索其他location
只有其他location后面的正则表达式没有匹配到时,才会采用这一条

(4)location /documents/abc {}
匹配任何以/documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其他location
只有其他location后面的正则表达式没有匹配到时,才会使用这一条

(5)location ^~ /images/ {}
匹配任何以 /images/开头的地址,匹配符合以后,停止往下搜索正则,使用这一条

(6)location ~* \.(gif|jpg|jpeg)$ {}
匹配所有以gif、jpg或jpeg结尾的请求
然而,所有请求/images/下的图片会被location ^~ /images/ 处理,因为^~的优先级更高,所以到达不了这一条正则

(7)location /images/abc {}
最长字符匹配到 /images/abc,优先级最低,继续往下搜索其他location,会发现^~ 和~ 存在

(8)location ~ /images/abc {}
匹配以/images/abc开头的,优先级次之,只有去掉location ^~ /images/才会使用这一条

(9)location /images/abc/1.html {}
匹配/images/abc/1.html 文件,如果和正则 ~ /images/abc/1.html 相比,正则优先级更高

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

3、三个匹配规则定义

第一个必选规则

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

location = / {
    proxy_pass http://tomcat_server/;
    }

第二个必选规则

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

location ^~ /static/ {
   root /webroot/static/;
   }

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

第三个规则

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

location / {
     proxy_pass http://tomcat_server;
 }

二、rewrite

  • rewrite功能使用nginx提供的全局变量或者自己设置的变量,结合正则表达式和标记实现URL重写以及重定向。
  • rewrite只能放在server{},location{},if{}中,并且默认只能对域名后面的除去传递的参数外的字符串起作用。

1、rewrite 执行顺序

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

2、rewrite语法格式

  • 语法rewrite;
  • regex:表示正则匹配规则
  • replacement:表示跳转后的内容
  • flag:表示rewrite支持的flag标记

3、flag标记说明

  • last:本条规则匹配完成后,继续向下匹配新的location URI规则,一般用在server和if中
  • break:本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在location中
  • redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
  • permanent:返回301永久重定向,浏览器地址栏显示跳转后的URL地址

三、示例

1、基于域名的跳转

  • 添加映射
    在这里插入图片描述
  • 创建日志目录
[root@localhost ~]# mkdir -p /var/log/nginx/
  • 修改配置文件
    在这里插入图片描述
  • 访问地址
    在这里插入图片描述
  • 跳转的界面
    在这里插入图片描述

2、基于IP地址执行跳转

  • 修改配置文件
    在这里插入图片描述
  • 创建目录,并编辑
[root@localhost ~]# mkdir -p /var/www/html/
[root@localhost ~]# cd /var/www/html
[root@localhost html]# vim weihu.html
[root@localhost html]# cat weihu.html
hello weihu!

  • 重新启动服务
    在这里插入图片描述
  • 浏览器访问
    在本机上面访问
    在这里插入图片描述
    在另一台主机上访问,显示weihu
    在这里插入图片描述

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

  • 修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

  • 创建目录并开始服务
[root@localhost ~]# nginx -t  #查看语法错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# mkdir -p /usr/local/nginx/html/bbs/post  #创建目录
[root@localhost ~]# cd  /usr/local/nginx/html/bbs/post
[root@localhost post]# vim 1.html
[root@localhost ~]# cat /usr/local/nginx/html/bbs/post/1.html
this is 1.html
[root@localhost post]# systemctl stop nginx   #开启服务
[root@localhost post]# systemctl start  nginx

  • 访问查看
    在这里插入图片描述

4、基于参数匹配的跳转

  • 修改配置文件
    在这里插入图片描述
  • 重新启动
[root@localhost ~]# nginx -t #查看语法错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# systemctl stop nginx
[root@localhost ~]# systemctl start nginx
  • 访问浏览器
  • 访问地址为http://www.cat.com/100-200-100.html会跳转到http://www.cat.com页面
    在这里插入图片描述
    在这里插入图片描述

5、基于目录下所有php结尾的文件跳转

  • 修改配置文件
  • vim /usr/local/nginx/conf/nginx.conf
    在这里插入图片描述
  • 重新启动
    在这里插入图片描述
  • 访问网页:http://www.cat.com/upload/123.php 跳转到 http://www.cat.com 页面
    在这里插入图片描述

6、基于最普通一条URL请求的跳转

  • 修改配置文件
    在这里插入图片描述
  • 重新启动
    在这里插入图片描述
  • 访问网页:http://www.cat.com/abc/123.html 跳转到 www.cat.com
    在这里插入图片描述

总结

Nginx rewrite 跳转

  • 主要是提升了一些服务的体验
  • 通过使用不同的配置,将达到不同的效果,

nginx rewrite的三种表现方式

  • if
  • location
  • rewrite

location的主要三种分配方式
精准匹配:location = \ {}
正则匹配:location ~ {}
普通匹配:location {}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值