Nginx的location匹配指令及常用内置变量

有如下指令语法可使用

~ #区分大小写的正则匹配

~* #不区分大小写的正则匹配

^~ #普通字符匹配,如果此选项匹配成功,忽略其他匹配选项,一般用来匹配目录

= #普通字符精确匹配

@ #定义一个内部命名的匹配,适用于error_page,try_files

匹配执行顺序及优先级:

- = 精确匹配 精确匹配会第一个被处理,如果精确匹配成功,停止搜索其他匹配模式,直接使用精确匹配 - 普通字符(/download,/img, ^~ /log,) 如果有前缀 ^~,且匹配此规则, 那么停止搜索其他规则,使用此规则 没有前缀 ^~,那么继续搜索正则匹配或者更长的普通字符匹配,如果发现正则匹配或者更长匹配,则使用正则或者更长匹配 - ~* 正则匹配被最后处理,匹配成功则使用此规则,否则使用其他匹配结果

实例

location = / {
 # 只匹配"/".
 [ configuration A ] 
}
location / {
 # 匹配任何请求,因为所有请求都是以"/"开始
 # 但是更长字符匹配或者正则表达式匹配会覆盖此匹配
 [ configuration B ] 
}
location ^~ /images/ {
 # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
 [ configuration C ] 
}
location ~* .(gif|jpg|jpeg)$ {
 # 匹配以 gif, jpg, or jpeg结尾的请求. 
 # 但是所有 /images/ 目录的请求将由 [Configuration C]处理. 
 [ configuration D ] 
}

请求URI例子:

#符合 configuration A
/
#符合 configuration B
/documents/document.html
#符合 configuration C 
/images/1.gif
#符合 configuration D
/documents/1.jpg

@location 例子

error_page 404 = @fetch;
location @fetch(
 proxy_pass http://fetch;
)

常见内部变量(如果发现更重要的会继续补充)

- $args 请求参数 例如:http://segmentfault.com/?test=test 那么 $args的值就是 test=test - $uri 不带host(域名)的请求路径 例如:http://segmentfault.com/write $uri 的值是 write

你可能感兴趣的:(nginx,etc)