• nginx的优先级和匹配方式


    Nginx的location的优先级和匹配方式:

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

    /test

    /image

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

    Nginx支持正则表达式:

    ^:字符串的起始位置

    $:字符串的结束位置

    *:匹配所有

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

    .:任意单个字符

    {n}:连续重复出现次

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

    1. z0-9A-Z]

    [c]:匹配单个字符c

    ():分组

    |:或

    Location匹配的分类:

    Location /

    Location -*

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

    要填完整的路径,一个字符都不能少,不能错

    1. 正则匹配location ~ / {}

    Location ^~:前缀匹配,以什么为开头

    -:区分大小写进行匹配

    ~*:不区分大小写匹配

    !-:区分大小写取反匹配

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

    1. location /test {}

    一般匹配

    Location匹配成功,不在继续向下匹配

    小实验:

    ocation匹配分优先级:

    精确匹配优先级最高,第二优先级是正则匹配,一般或通用匹配优先级最低

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

    工作当中配置location的原则是什么:(重要)

    1. 网首页:一律用精确匹配,网站首页一般都是一个静态页面内,一般都匹配网站的根工作目录 location= / {}
    2. 处理静态文件的请求:目录匹配和后缀匹配 location ^-/static {} 第二种方式用正则匹配location -*\. {html|jpg|jepg|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语句,但是不支持else语句

    Rewrite语法:

    Rewrite[flag]

    :正则表达式

    :跳转的正则表达式

    [flag]:标志位 “标记”

    Flag:

    Last:本条规则匹配完成后,继续向下匹配所有的location URI规则

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

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

    Permanent:永久重定向301 uri地址也会发生变化

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

    .*:匹配所有

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

    www.ky32.com/test/index.html 1.jpg

    www.ky32.com/ky32/index.html 1.jpg

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

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

    实验验证:

    永久重定向

    临时重定向

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

    Last:继续匹配

    报错日志:

    internal redirection cycle while processing

    处理请求时发生了重写或者内部重定向循环,Nginx循环最多可以循环十次,超过十次会报错

    解决方法:

    总结:rewrite和location似乎两个都可跳转,但是区别在于rewrite是在同一域名之内更改获取资源的路径,location是对路径访问控制

    三个实验:

    1. 基于域名的跳转

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

    2.基于ip访问跳转

    公司业务有一个新版本要上线了,用户访问网站统一显示固定的维护页面,只有公司的192.168.233.61可以访问,其他都是维护页面

    真机无法访问:

    基于目录下.php访问.php跳转到新的页面

    随后做一个映射

  • 相关阅读:
    华为Mate 60难以撼动苹果的市场份额
    笔记--autosar是什么
    在Bender对偶算法的时候出现bilinear项怎么办?
    yarn下载某个包时卡住手动下载解决方案
    用form表单以post的方式提交数据跳转地址
    C#.NET ORM 如何访问 Access 数据库 [FreeSql]
    css-inpu边框
    通过包管理器方式安装 Node.js
    Python7-使用pickle模块将Python对象序列化
    KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现
  • 原文地址:https://blog.csdn.net/wutong0824/article/details/133896385