有如下指令语法可使用
~ #区分大小写的正则匹配
~* #不区分大小写的正则匹配
^~ #普通字符匹配,如果此选项匹配成功,忽略其他匹配选项,一般用来匹配目录
= #普通字符精确匹配
@ #定义一个内部命名的匹配,适用于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