您的位置:首页 > 运维架构 > Nginx

LOCATION BLOCK 匹配规则

2015-11-22 12:42 423 查看
#location 修饰符
location block匹配request url中domain name或者ip/port之后的请求部分,即请求资源的路径。
location optional_modifier location_match {

. . .

}
     location修饰符关联的location将做如下解析:
 = 请求的url必须严格匹配被location指定的路径
none如果没有修饰符,将对url做前缀匹配
^~ 最佳的非正则表达式前缀匹配
~   大小写敏感的正则匹配
~*大小写不敏感的正则匹配
#location匹配规则    · nginx检查所有基于前缀的匹配,对于一个完整的请求,nginx会检查所有的前缀匹配    · 首先,nginx会查找一个精确匹配。如果匹配到了 = modifier,匹配会立即终止,该location就会被选择处理这个请求。     · 如果没有精确匹配(= modifier),nginx继续进行前缀匹配,对于给定的url,选择最长的前缀匹配。然后依据下列规则,继续匹配。    ·  如果最长的前缀匹配有(^~ modifier),nginx会立即结束查询,选择该location。    ·  如果没有 ^~ modifier,该匹配会被暂时存起来,以便搜索可以继续。    ·  最长的匹配被存起来后,nginx会继续匹配正则表达式。nginx移动到 location list 的顶部,然后试着去匹配正则表达式,第一个被匹配的正则表达式会立即被选择处理请求,结束匹配。    ·  如果没有正则表达式被匹配,则之前存储的最长location被选择用来处理请求。    特别需要理解的:        nginx正则匹配结果优先于前缀匹配。但是前缀匹配在先,同时允许通过 ^~ 和 = 来改变这种趋势。    前缀匹配一般选择最长,最精确的匹配,而正则匹配在第一个匹配发现时,匹配就会终止。也就是说,正则匹配跟配置文件中规则的定义位置有很大关系。    #location内部跳转规则    ·index指令    如果精确匹配的结果是一个目录,请求会 redirect 到其他 location。    如果请求精确匹配到了 /exact,则该 location 会默认继承 index directive , 然后内部跳转到第二个 location处理。
index index.html;

location = /exact {
}

location / {
}
· try_files
该指令让 nginx 检查一个文件,目录是否存在。最后一个参数可以是一个url,用于 nginx 做内部跳转使用。
root /var/www/main;
location / {
try_files $uri $uri.html $uri/ /fallback/index.html;
}

location /fallback {
root /var/www/another;
}
这个例子中如果请求的名字是/neojos, nginx会在root中查找一个叫neojos的文件,如果没有找到,接下来查找一个neojos.html的文件,最后会查找在root下是否存在neojos/的目录。如果全部查找失败了,则会跳转到 /fallback/index.html, 触发下面的location处理。
· rewrite
在rewrite指令中,使用 last 参数或则不加参数,nginx基于 rewrite 的结果,将会选择一个新的 location处理。
root /var/www/main;location / {rewrite ^/rewriteme/(.*)$ /$1 last;try_files $uri $uri.html $uri/ /fallback/index.html;}location /fallback {root /var/www/another;}
如果请求是 /rewriteme/hello,将会在第一个 location 被重写为/hello。然后再被第一个 location 的 try_files处理,如果没有查找到,则返回 /fallback/index.html,被第二个 location 处理。
·error_page
当返回301或者302 code 的时候,相关的return directive 也可以执行,不同的是浏览器会显示一个新的请求。rewrite 的 redirect 和 permanent 标志也是相同的,然而这样的 location search 是不期望的,因为显示的跳转会导致一个新的请求。
error_page directive 可以产生一个内部的跳转,类似于 try_files。如果try_files 被设置了, error_page 可能永远得不到执行。
root /var/www/main;location / {error_page 404 /another/whoops.html;}location /another {root /var/www;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx location rewrite