示例
location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ 规则 A ]
}
location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ 规则 B ]
}
location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ 规则 C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ 规则 D ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ 规则 E ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 [规则 E] 处理,因为 ^~ 优先级更高
[ 规则 F ]
}
location /images/ {
# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ 规则 G ]
}
location /images/abc {
# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
[ 规则 H ]
}
location ~ /images/abc/ {
# 只有去掉 [规则 E] 才有效:先最长匹配 [规则 H] 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ 规则 I ]
}
location指令说明
该指令用于匹配URL。
语法如下:
location [ = | ~ | ~* | ^~] uri {
}
- = : 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
- ~ : 用于表示 uri 包含正则表达式,并且区分大小写
- ~* : 用于表示 uri 包含正则表达式,并且不区分大小写
- ^~ : 用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location快中的正则uri和请求字符串做匹配。
注意:如果uri包含正则表达式,则必须要有~ 或者 ~* 标识。