作用:
location指令的作用是根据用户请求的url来执行不同的应用。
语法:
location [ = | ~ | ~* | ^~ ] uri {
...................
}
注意:uri地方,可以使用普通的字符串地址路径,也可以使用正则表达式,正则表达式前面也可以是“~”或者”~*”
location匹配实例:
location = / {
[ configuration A ]
}
#当用户 请求“/”时,将匹配configuration A;
location / {
[ configuration B ]
}
#当用户请求“/index.html”时,将匹配configuration B;
location /documents {
[ configuration C ]
}
#当用户请求“/documents/document.html”时,将匹配configuration C;
location ^~ /images {
[ configuration D ]
}
#当用户请求“/images/1.gif”时,将匹配configuration D;
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
#当用户请求“/documents/1.jpg”时,将匹配configuration E。
location匹配实战:
server {
listen 80;
server_name www.a.com;
root html;
location / {
return 401;
}
location = / {
return 402;
}
location /documents {
return 403;
}
location ^~ /images {
return 404;
}
location ~* \.(jpg|gif|jpeg)$ {
return 500;
}
}
用户请求的url | 设置的状态码 | 说明 | 优先级 |
---|---|---|---|
当为空或者/时 | 返回402,即匹配了:location = / {return402;} | = 的精确匹配优先级最高 | 1 |
/index.html或者任意不匹配其他的location的字符串 | 返回401,即匹配了:location / {return 401;} | / 为默认匹配,如果没有匹配上其他的location,则最后匹配“默认匹配规则” | 5 |
/documents/document.html | 返回403,即匹配了:location /documents {return 403;} | 此部分为路径匹配,即匹配/documents/,注意后面的/documents/1.jpg,没有匹配此处的location,而是匹配了结尾的1.jpg | 4 |
/images/1.gif | 返回404,即匹配了:location ^~ /images {return 404;} | 此部分为路径匹配,但是前面增加了^~,所以优先匹配路径,而没有匹配结尾的1.jpg | 2 |
/documents/1.gif | 返回500,即匹配了:location ~* .(jpg|gif|jpeg)$ {return 500;} | 此部分匹配了1.gif,属于扩展名匹配,虽然有/documents/,但是还匹配了扩展名 | 3 |