精华内容
下载资源
问答
  • NGINX location 在配置优先级     配置文件示例如下 location = / { # 仅仅匹配请求 / [ configuration A ] } location / { # 匹配所有以 / 开头请求。 # 但是如果有更长同类型表达式,则选择...

    NGINX location 在配置中的优先级

     

     

    配置文件示例如下

    location = / {

    # 仅仅匹配请求 /

    [ configuration A ]

    }

    location / {

    # 匹配所有以 / 开头的请求。

    # 但是如果有更长的同类型的表达式,则选择更长的表达式。

    # 如果有正则表达式可以匹配,则优先匹配正则表达式。

    [ configuration B ]

    }

    location /documents/ {

    # 匹配所有以 /documents/ 开头的请求。

    # 但是如果有更长的同类型的表达式,则选择更长的表达式。

    # 如果有正则表达式可以匹配,则优先匹配正则表达式。

    [ configuration C ]

    }

    location ^~ /images/ {

    # 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。

    # 所以,即便有符合的正则表达式location,也不会被使用

    [ configuration D ]

    }

    location ~* \.(gif|jpg|jpeg)$ {

    # 匹配所有以 gif jpg jpeg结尾的请求。

    # 但是 以 /images/开头的请求,将使用 Configuration D

    [ configuration E ]

    }

     

    匹配结果

     

    URL

    匹配结果

    原因

    /

    configuration A

    =优先级最高,匹配到结束

    /index.html

    configuration B

    路径匹配,

    /documents/document.html

    configuration C

    第二个匹配到,往后继续匹配,发现第三个匹配最精确

    /images/1.gif

    configuration D

    同时匹配第二个,第四个,和第五个。但是由于优先级问题,

    /documents/1.jpg

    configuration E

    同时匹配第二个,第三个,和第五个。第五个是正则表达式,

     

    优先级如下

     

    (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

     

    注: ~ 和 ~*都是正则匹配 其中 ~* 不区分大小写 ~ 区分大小写

     

     

    Nginx root 和 alias 的区别

     

    nginx配置下有两个指定目录的执行,root和alias

     

    例如有以下配置文件:

     

     

    location /img/ {

        alias /var/www/image/;

    }

    #若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件

    location /img/ {

        root /var/www/image;

    }

    #若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。

     

     

    alias是一个目录别名的定义,root则是最上层目录的定义。

     

    还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~

     

     

    展开全文
  • 在location中,有一种通配location,所有请求,都可以匹配,如下: location / { 因为所有地址都以 / 开头,所以这条规则将匹配到所有请求 但是正则最长字符串会优先匹配 } proxy_pass后面只有域名+端口 则...

    proxy_pass的使用规则

    Location详解之精准匹配、正则匹配

    Directives with the = prefix that match the query exactly. If found, searching stops.
    All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
    Regular expressions, in order of definition in the configuration file.
    If #3 yielded a match, that result is used. Else the match from #2 is used.
    =前缀的指令严格匹配这个查询。如果找到,停止搜索。
    所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
    正则表达式,在配置文件中定义的顺序。
    如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用。

    总结

    在没有标识符的请求下,匹配规则如下:
    nginx服务器首先在server块的多个location块中搜索是否有标准的uri和请求字符串匹配。如果有多个标准uri可以匹配,就匹配其中匹配度最高的一个location。
    然后,nginx在使用location块中,正则uri和请求字符串,进行匹配。如果正则匹配成功,则结束匹配,并使用这个location处理请求;如果正则匹配失败,则使用标准uri中,匹配度最高的location。
    备注:
    如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。
    普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。
    正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)。
    在location中,有一种通配的location,所有的请求,都可以匹配,如下:
    location / {
    因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
    但是正则和最长字符串会优先匹配
    }

    proxy_pass后面只有域名+端口 则把匹配到的url加在其后
    如果有其他内容,则把未匹配到的加在其后

    alias和root
    root类似proxy_pass第一种,
    alias第二种,一定要带/

    index & root

    index index$geo html index0.html index.html;

    切记, index指令并不是查到文件之后,就直接拿来用了。它的实际工作方式是:

    如果文件存在,则 使用文件作为路径,发起内部重定向。直观上看上去就像再一次从客户端发起请求,Nginx再一次搜索 location一样。

    既然是 内部重定向,域名+端口不发生变化,所以只会在同一个 server下搜索。

    同样,如果 内部重定向发生在 proxy_pass反向代理后,那么重定向只会发生在代理配置中的同一个 server。

    该指令后面可以跟多个文件,用空格隔开;

    如果包括多个文件,Nginx会根据文件的枚举顺序来检查,直到查找的文件存在;

    文件可以是相对路径也可以是绝对路径,绝对路径需要放在最后;

    文件可以使用变量 $来命名;

    index index$geo html index0.html index.html;

    该指令拥有默认值, index index.html ,即,如果没有给出index,默认初始页为index.html
    nginx默认是不允许列出整个目录的。如需此功能,
    打开nginx.conf文件,在location server 或 http段中加入
    autoindex on;
    另外两个参数最好也加上去:

    autoindex_exact_size off;
    默认为on,显示出文件的确切大小,单位是bytes。
    改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

    autoindex_localtime on;
    默认为off,显示的文件时间为GMT时间。
    改为on后,显示的文件时间为文件的服务器时间

    location /images {
    root /var/www/nginx-default/ibugaocn;
    autoindex on;
    }
    在这里插入图片描述

    location /img/ {
    alias /var/www/image/;
    }
    #若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
    location /img/ {
    root /var/www/image;
    }
    #若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]

    另外对于index,含义如下

    location / {
    root /var/www/;
    index index.htm index.html;
    }
    这样,当用户请求 / 地址时,Nginx 就会自动在 root 配置指令指定的文件系统目录下依次寻找 index.htm 和index.html 这两个文件。如果 index.htm 文件存在,则直接发起“内部跳转”到 /index.htm 这个新的地址;而如果 index.htm 文件不存在,则继续检查 index.html 是否存在。如果存在,同样发起“内部跳转”到/index.html;如果 index.html 文件仍然不存在,则放弃处理权给 content 阶段的下一个模块

    try_file

    location /images/ {
    root /opt/html/;
    try_files $uri $uri/ /images/default.gif;
    }
    比如 请求 127.0.0.1/images/test.gif 会依次查找 1.文件/opt/html/images/test.gif 2.文件夹 /opt/html/images/test.gif/下的index文件 3. 请求127.0.0.1/images/default.gif

    4.其他注意事项
    1.try-files 如果不写上 $uri/,当直接访问一个目录路径时,并不会去匹配目录下的索引页 即 访问127.0.0.1/images/ 不会去访问 127.0.0.1/images/index.html

    展开全文
  • 配置的时候为: location /nanshan { root /home } 用户访问的时候请求为:url:port/nanshan/files/img/face.png alias 可以为你的路径做一个别名,对用户透明 配置的时候为: location /hello { alias /...

    1. root与alias

    假如服务器路径为: /home/nanshan/files/img/face.png

    • root 路径完全匹配访问

      配置的时候为:

       location /nanshan {
           root /home
       }
      

      用户访问的时候请求为:url:port/nanshan/files/img/face.png

    • alias 可以为你的路径做一个别名,对用户透明

      配置的时候为:

       location /hello {
           alias /home/nanshan
       }
      

      用户访问的时候请求为:url:port/hello/files/img/face.png,相当于为目录nanshan做了一个自定义的别名。

    2.location的匹配规则

    • 空格:默认匹配,普通匹配

       location / {
            root /home;
       }
      
    • =:精确匹配

       location = /nanshan/img/face1.png {
           root /home;
       }
      
    • ~*:匹配正则表达式,不区分大小写

       #符合图片的显示
       location ~* .(GIF|jpg|png|jpeg) {
           root /home;
       }
      
    • ~:匹配正则表达式,区分大小写

       #GIF必须大写才能匹配到
       location ~ .(GIF|jpg|png|jpeg) {
           root /home;
       }
      
    • ^~:以某个字符路径开头

       location ^~ /nanshan/img {
           root /home;
       }
      
    展开全文
  • 在nginx中,我们可以通过location块与root指令...其实,除了root指令,还有另外一个指令也能实现类似功能,它就是alias指令,root指令alias指令都能将url服务器路径进行对应,但是,它们之间又存在一些区别 loc...

    在nginx中,我们可以通过location块与root指令结合的方式,将"url"与"服务器路径”建立起对应关系, location 块负责匹配url, root指令负责将匹配到的urI与服务器中某个具体目录对应起来
    其实,除了root指令,还有另外一个指令也能实现类似的功能,它就是alias指令,root指令和alias指令都能将url和服务器路径进行对应,但是,它们之间又存在一些区别

    location /demo {
    root /opt/test;
    }
    location块匹配的url为"/demo", root指令的路径为"/opt/test",那么,根据上述配置,当我们访问"/demo"这个url时,实际上访问的到底是服务器中的哪个路径呢?答案是"/opt/test/demo"路径
    那么,我们来举一反三试试,配置上述location块后, 当我们访问"/demo/test1/nginx.jpg"这个urI时,我们访问的是哪个目录中的文件呢?你肯定已经想到了正确答案,
    答案就是"/opt/test/demo/test1/nginx.jpg"

    location /demo1 {
    alias /opt/test;
    }

    alias /demo1 = /opt/test
    root /demo1 = /opt/test/demo1
    如你所见,alias指令对应的值也是一个路径,当alias指令与location块结合时,它们会怎样建立url与服务器路径的对应关系呢?
    答案如下:上例配置表示,当我们访问
    /demo1/a.jpg"时, 其实就是在访问服务器的"
    opt/test/a.jpg", 也就是说,当我们使用alias时,
    location的url是与alias的路径完全对等的

      location /demo {
                root   /opt;
                index  index.html index.htm;
            }
    
    [root@server1 demo]# cat /opt/demo/index.html 
    i am /demo location
    [root@server1 demo]# 
    

    在这里插入图片描述

    location /demo {
                alias   /opt;
                index  index.html index.htm;
            }
    
    [root@server1 demo]# cd /opt/
    [root@server1 opt]# ls
    demo
    [root@server1 opt]# vim index.html
    [root@server1 opt]# cat /opt/index.html 
    i am alias server
    [root@server1 opt]# nginx -s reload
    [root@server1 opt]# 
    

    在这里插入图片描述
    看到此处,root指令和alias指令的区别就很明显了。
    root指令会将location块的"urI路径"带入到"root指令路径"中,将带入后的路径作为"最终路径",使用"最终路径"与urI建立对应关系。
    alias指令则直接将location块的"url路径"与" alias指令路径"建立对应关系

    展开全文
  • nginx—rootalias的区别1. 实验2. rootalias的区别 1. 实验 在nginx中,我们可以通过location块与root指令结合的方式,将"url"与"服务器路径"建立起对应关系,location块负责匹配url,root指令负责将匹配到的url...
  • 配置 / /* 的区别 < url-pattern>/ 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url < url-pattern>/ 会匹配所有url:路径型的后缀型的url(包括/login,.jsp,.js.html等)...
  • 这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 , maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载. 简单而言, mirror可以拦截对远程...
  • 不过这里要强调是,一般来说~是指:区分大小写正则匹配而~*表示:不区分大小写正则匹配但是对于一些对大小写不敏感操作系统,这两者没有区别。另外一个就是^~,其表示以指定模式开始正则匹配。 4.内部访问...
  • 详解maven的setting配置文件中mirrorrepository的区别发布时间:2020-09-24 11:18:21来源:脚本之家阅读:85当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 .这个时候如果mavensetting.xml中配置...
  • 配置servlet时//*的区别

    千次阅读 2017-12-07 14:17:27
    /* 会匹配所有url:路径型的和后缀型url(包括/login,*.jsp,*.js*.html等) 我们都知道在基于SpringApplication中,需要在web.xml中增加下面类似的配置信息:      org.springframework.web.context
  • 配置web.xml时,没有注意/ /* 的区别,导致出现404报错 原因: < url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类 。&...
  • 上一篇我们讲解了用@ConfigurationProperties获取配置文件的值,这次我们来讲另一种方法,@Value ... * 将配置文件中配置的没一个属性的值映射到这个组建中 * @configurationproperties:告诉sprin...
  • 最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。 location /abc/ { alias /home/html/abc/; } 这个配置实际上指向的是/home/...
  • 这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 ,maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载.简单而言, mirror可以拦截对远程仓库的...
  • 一、不写lastbreak 流程就是依次执行这些rewrite ...rewrite last - url重写后,马上发起一个新请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变 rewrite redirect...
  • 配置 <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern>... 不会匹配到*.jsp,即:.jsp不会进入spring DispatcherServlet类 。 &
  • 这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 ,maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载.简单而言, mirror可以拦截对远程仓库的...
  • nginx在配置proxy_pass的时候 URL结尾加斜线(/)与不加的区别和注意事项 假设访问路径的 /pss/bill.html 加/斜线的情况 location /pss/ { proxy_pass http://127.0.0.1:18081/; } 被代理的真实访问路径为:...
  • /表示匹配所有标准url,类似*.jsp,*.action,*.do,*.css,*.js都无法匹配(只拦截路径,不拦截页面,如果jsp、css等) /*可以匹配所有 ...springmvc配置文件中/*(不包含子目录)/**(包含子目录) ...
  • 1.概念和区别 在nginx中,可以通过location块root指令结合方式, 将“url”与“服务器路径”建立起对应关系 location块负责匹配url,root指令负责将匹配url与服务器中某个具体目录对应起来 root指令alias...
  • //*的区别: 两者都能够匹配任何资源,只不过两者匹配的优先级是不一样的,当请求资源与其他Servlet都无法匹配时,才会走/的路径,/所关联的Servlet进行匹配,所以/的优先级是比较低的。 需要知道的两件事: 1、...
  • 在网上搜了很多答案,但讲最清楚明白是这篇吧: ...DefalutServlet(又叫默认Servlet、缺省Servlet)路径配置恰巧是 / ,也就是说其它Servlet不能匹配的请求将由它进行处理。 当我们在自己S
  • 配置简单代理 例1 当你访问地址中匹配到 cdn.cmvalue.com/repo/october-web/yl-homepage-master/ 中就会去找你本地 /Users/zhangyu/web/yongliu/yl-homepage/ 文件。 server { listen 80; server_name cdn....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 510
精华内容 204
关键字:

匹配和配置的区别