• nginx的location的优先级和匹配方式


    nginx的location的优先级和匹配方式

    http模块有server,在server模块才有location,location匹配的是uri

    /test

    /image

    在一个server当中会有多个location,如何来确定匹配哪个location

    nginx的正则表达式:

    ^:字符串的起始位置

    $:字符串的结束位置

    *:匹配所有

    +:匹配前面的字符一次或者多次

    ?:匹配前面的字符0次或者1次

    .:任意单个字符

    {n}:连续重复出现n次

    {n,m}:连续重复出现n-m次

    [a-z0-9A-Z]

    [c]:匹配单个字符c

    ():分组

    |:或

    location匹配的分类:

    location /

    location -*

    www.ky32.com/test

    1、精确匹配location = /test {..}

    完整的路径,一个字都不能少,也不能错

    2、正则匹配 location - / {}

    location ^-:前缀匹配,以什么为开头

    location ~:区分大小写进行匹配

    location ~*:不区分大小写进行匹配

    location !~:区分大小写取反匹配

    location !~*:不区分大小写取反匹配

    4、location /test {}

    一般匹配

    注意:location一旦匹配成功,就不再向下继续匹配

    面试题:

    location匹配的优先级:

    精确匹配优先级最高----------其次是正则匹配----------一般匹配优先级最低

    location = 完整路径 > location ^~ > location ~,~* > location /test/location /

    在工作当中配置location的原则:

    1、网站首页:都是精确匹配(一般情况下网站首页都是静态页面,匹配网站的根工作目录)

    location = / {

    }

    2、处理精要文件的请求(目录匹配和后缀匹配)

    location ^~ /static {

    }

    location ~* \. {html|jpg|jpeg|gif|png} $ {

    }

    3、一般规则:动态请求,把动态请求转发到后端的动态页面的服务器

    location / {

      proxy_pass http://tomcat server;

    }

    nginx的重定向

    rewrite:结合了nginx提供的全局变量和自定义的变量,再结合正则表达式以及标志位实现url重写以及重定向

    rewrite执行顺序:

    1、执行server块里面的rewrite

    2、执行location里面定义的rewrite

    3、选定location中的rewrite

    rewrite中可以if语句,只有if没有else

    rewrite语法:

    rewrite [flag]

    :正则表达式

    :跳转的内容或者路径

    [ flag ]:标志位 “标记”

    flag:

    last:本条规则匹配完成之后,继续向下匹配新的location URI规则

    break:本条规则匹配完之后立即终止,页面内容变化,但是uri不变

    redirct:临时重定向 302 uri的地址会发生变化

    permanent:永久重定向 301

    rewrite /test/(.*) /ky32/$1 permanent;

    .*:匹配所有

    $1:表示捕获组$1引用正则表达式的第一个捕获组

    搜索引擎的权重

    永久重定向会加入到搜索引擎的排名

    临时不会加搜索引擎的权重

    break:跳转,跳转的时候不会改变uri,用的比较多

    last:继续匹配

    internal redirection cycle while processing

    处理请求时发生了重写或者内部重定向循环,进入了无限循环。nginx循环最多可以执行10次,超过10次,会报错,500

    总结:rewrite和location都可以跳转,似乎有点像,但是区别在于rewrite是在同一域名之内更改获取资源的路径

          location是对路径访问控制

    基于域名的跳转:

    www.kgc.com但是公司业务变更,迁移到了新的域名www.benet.com代替,但是旧域名不能被废除,访问kgc可以跳转到benet,且匹配的uri不能变

    基于ip访问跳转:

    公司业务新版本上线,用户访问网站统一显示固定的维护页面

    只有公司的192.168.233.30可以访问

    基于目录下.php访问,只要访问.php就会跳转到新的页面

  • 相关阅读:
    第6章Linux实操篇-开机、重启和用户登录注销
    多线程------实际篇
    11.30 WAVE SUMMIT+2022将在深圳举办,官网报名通道正式开启
    CRM系统中人工智能对销售业务的帮助
    STM32F1与STM32CubeIDE编程实例-金属触摸传感器驱动
    【sql】You can‘t specify target table for update in FROM clause
    李沐动手学深度学习V2-BERT微调和代码实现
    【23真题】很少见!第6题有点新颖!
    内存问题难定位,那是因为你没用ASAN
    SpringBoot自带序列化工具Jackson如何做到序列化忽略某个字段,反序列化忽略某个字段???
  • 原文地址:https://blog.csdn.net/wyh20030130/article/details/133866584