Nginx

来源:互联网 发布:风力发电现状 知乎 编辑:程序博客网 时间:2024/05/20 01:46

Nginx - Location 匹配规则

语法规则

location = /uri        = 表示精确匹配某个urilocation ^~ /uri       ^~ 表示精确的前缀匹配以uri开头的请求,优先级在正则之前location ~ uri         ~ 表示区分大小写的正则匹配,这里的uri就是一个正则表达式location ~* uri        ~* 表示不区分大小写的正则匹配,这里的uri就是一个正则表达式location /uri          不带修饰符,表示精确的前缀匹配以uri开头的请求,优先级在正则之后location /             通用匹配,未匹配到其他location的请求都会走到这里。                        其实就相当于匹配以/开头的请求,自然就能匹配全部

匹配顺序优先级

当存在多个同级location时,表达式越精确,优先级越高

例如:匹配http://localhost/wapabcd 时,/wap 优先级高于/wa

当存在多个不同级location时,匹配的优先级如下:

1、 =(完全精确匹配)2、 ^~(带修饰符的前缀精确匹配)3、 ~(区分大小写的正则匹配)4、 ~*(不区分大小写的正则匹配)5、 /uri(无修饰符的前缀精确匹配)6、 /(通用匹配)

例子:

#rule1 ,精确匹配http://localhost/q/a.htmllocation = /q/a.html {     echo "rule '=', /q/a.html";}#rule2 ,匹配以q开始的请求,如:http://localhost/qwer、http://localhost/q/#但无法匹配 http://localhost/q/a.html,因为rule1优先级高于rule2,所以会被rule1截获location ^~ /q { abc    echo "rule '^~',start with /q";}#rule3    这里功能和rule2相同,但是无法生效,因为正则的优先级低于^~location ~ ^/q.* {     echo "regular expression '~',start with /q";}#rule4    这里匹配所有以.js/.css结尾的请求,如http://localhost/a/jquery.js,#但无法匹配http://localhost/q/jquery.js,因为rule2优先级高于rule4,所以会被rul2截获location ~ \.(js|css)$ {    echo "regular expression '~',end with .js/.css";}#rule5    这里匹配不区分大小写的以.js/,css结尾的请求,如http://localhost/a/jquery.JSlocation ~* \.(js|css)$ {    echo "regular expression '~',end with .jpeg/.css";}#rule6    无修饰符地匹配以w开始的请求,如http://localhost/wert、http://localhost/w/#但无法匹配 http://localhost/w/a.js,因为rule4/5的优先级高于rule6location /w {    echo "rule no modifier '/w',start with /w";}#rule7    无修饰符地匹配以wa开始的请求,如http://localhost/waert、http://localhost/wa/#此时优先级高于rule6,因为在修饰符相同的情况下,越精确则越优先location /wa {    echo "rule no modifier '/wa',start with /wa";}    #rule8    通用匹配,接受所有未被其他location捕获的请求#其实本质上是因为所有请求都是以/开始的,所以能够匹配所有请求location / {    echo "rule '/', match all requests"}
原创粉丝点击