nginx location详解

摘要:
Nginx的位置匹配位置根据类型可分为两种类型:普通配置和常规匹配。1.通用配置通用位置根据使用方法可分为两种类型。格式如下:1.位置/{命令序列}解释:括号中的定义对当前路径和子路径下的所有对象都有效。服务器{listen80;server_nameww.benet.com;indexindex.html;位置/{root/web;}位置/bbs{root/web;}结论是,当用户请求的url同时匹配两个位置时,如果第一个段不生效,则最大前缀将生效。访问www.benet Com/prefix/a的用户无法匹配到最高优先级:这意味着一旦匹配到该位置,它将立即生效。其他位置将不会生效,无论它们是否符合请求。

Nginx的Location匹配

 

Location根据类型分为两种:普通配置和正则匹配

 

一、 普通配置

 

普通location根据使用方法又分为两种,格式如下:

1.  location  / {

命令序列

}

       

解释:括号中定义的表示对当前路径及子路径下的所有对象有效。优先级最低

用户所有的请求都能被它匹配到。

        例子:

location / {       

              root /web; 

                相应策略     

    }

        这说明网页根目录在/web

        访问的时候直接http://127.0.0.1或是域名就可以了

       用户所有的请求都能被它匹配到

       

location /bbs {

       root "/web";

         相应策略

}

 

这就说明网页根目录是位于  /web/bbs

访问的时候直接http://127.0.0.1/bbs就可以了

当用户访问

http://127.0.0.1/bbs/

或是

http://127.0.0.1/bbs/子路径的时候才能被上边的路径匹配到。

        问题:当用户访问http://127.0.0.1/bbs/a.html

        这两段location 同时存在时如下,那么哪段配置会生效呢?

        server {

        listen       80;

        server_name  www.benet.com;

        index index.html;

        location  / {

                root /web;

        }

        location  /bbs {

                root /web;

        }

 

结论就是,

当用户请求的(/bbs)url同时匹配到两段location时,

最大前缀生效(location /bbs生效

如果没有这段(location /bbs第一段生效。

第一段相当于默认策略,因为location / 包含所有的请求,所有的请求都是以  ”/” 开始的

 nginx location详解第1张

 

 

2.  location = /路径 {

命令序列

}

  解释:括号中定义的表示对当前路径有效,子路径不生效(精确匹配指定的路径不包括子路径)。“它的优先级最高。”

例子:

location = /prefix {

}

 

也就是用户访问www.benet.com/prefix能被上边的location匹配到,它只匹配"/prefix",

"/"下的子路不匹配。

用户访问www.benet.com/prefix/a 就不能被它匹配到

优先级最高:指的是一旦匹配到此location ,立即生效。其它location无论是否匹配到请求都不生效。

 

例子:

location  /prefix/ {

                root /;

        }

location  = /prefix/  {

               return 507;

       }

 

 

匹配顺序注解:

 nginx location详解第2张

 

 

二、 正则匹配

 

正则匹配也分为两种:

  1. location ~ URI {}

~匹配的文件是区分字符 大小写的

2.location ~* URI {} :

~*匹配的文件是不区分字符大小的

   

    正则匹配是按照正则location编写的顺序生效的,一旦匹配成功即停止匹配到后续的location

 

例子:

   location  ~ /bbs {

                return 400;

    }

   location ~* /bbs {

                return 500;

   }

网页返回错误信息400

nginx location详解第3张

 

 

 

然后将两段配置调换一下位置

  location ~* /bbs {

                return 500;

        }

  location  ~ /bbs {

                return 400;

        }

 nginx location详解第4张

 

三、匹配顺序和生效顺序

 

匹配顺序和生效顺序是两个概念

当配置中出现多个locaton并且普通和正则都有,那么

1、匹配顺序是:

    用户请求的URL

    1)先匹配普通location

            普通location在匹配是按照编辑顺序匹配

    2)在匹配正则location

            正则location在匹配时按照编辑顺序匹配

但是正则和普通locaiton不按照编辑顺序匹配

2、生效顺序

当普通和正则都存在的情况下,遵循以下原则

1.nginx开始按照编辑顺序依次匹配普通location

    (1)如果匹配过程中匹配到了

        "location =" :nginx会立即生效即停止后续的匹配

    (2)如果没有"locaiton ="话,

        如果匹配到"locatin ^~"。会停止后续的正则匹配.然后此策略立即生效。

    

 

    (3)    如果以上两种location都不存在的话

        nginx会匹配所有location后看后续有没有正则locaion

            如果后续没有正则locaiton

                然后最大前缀locaiton生效

                最后是location / 生效

            如果后续还有正则location

                一旦匹配成功一条正则locaion,这条会生效,并且会停止后续的正则匹配,还会会覆盖前边的普通location结果 

 



 

 

 

免责声明:文章转载自《nginx location详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(java实现)杭电oj 2034 人见人爱A-BUbuntu 绿色(tar.gz)安装 nodejs下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring之ResourceLoader加载资源

Resource与ResourceLoader对比 1、Resource接口定义了应用访问底层资源的能力。 通过FileSystemResource以文件系统绝对路径的方式进行访问; 通过ClassPathResource以类路径的方式进行访问; 通过ServletContextResource以相对于Web应用根目录的方式进行访问。 在获取资源后,用...

Nginx 完全配置

入门教程 初识Nginx 你真的了解如何将 Nginx 配置为Web服务器吗 ## 设置静态网页编码 --> 针对非类Unix系统 针对服务器 http { ... charset UTF-8; ... include /etc/nginx/conf.d/*.conf; } 针对location ser...

window.location.hash在firefox下中文自动转码为UTF-8问题

1.window.location.hash window.location.hash这个属性主要是读取和写入网页位置的,我们经常会用来控制网页单页面跳转或者是控制网页位置。然而这个属性在firefox下遇到中文时却会被自动转码为UTF-8,这是火狐等相似浏览器对中文url的一些处理的不同。以下介绍一个方法可以fixed掉这个问题。 2.解码函数 前面已经...

Nginx的几个常用配置和技巧

一个站点配置多个域名 server{listen80;server_nameops-coffee.cnb.ops-coffee.cn;} server_name后跟多个域名即可,多个域名之间用空格分隔 一个服务配置多个站点 server{listen80;server_namea.ops-coffee.cn;location/{root/home/proj...

nginx 配置语法

一、语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 ~ 开头表示区分大小写的正则匹配 ~* 开头表示不...

EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除

原文链接:http://blog.csdn.net/fanbin168/article/details/51485969   批量插入 (17597条数据批量插入耗时1.7秒)   using System;   using System.Collections.Generic;   using System.Linq;   usi...