一. location使用语法
location [ = | ~ | ~* | ^~ ] URI {
...
}
说明:
1. 其中URI可以是普通的字符串地址路径,或者是正则表达式,匹配成功后执行后面大括号里的相关指令
2. URI前面的匹配标识说明
= 开头表示精确匹配, /和^~ 开头表示常规字符串, 正则表达式匹配可以使用 ~(区分大小写匹配)和 ~* (不区分大小写匹配),!~ 和 !~* 则表示不匹配
总结 1. 普通location会先于正则location进行匹配。 2. 如果匹配到普通之后,想结束不再匹配正则的location,那么可以在普通的location前面加上 ^~这两个符号。 3. 如果继续匹配正则location,正则匹配到的结果会覆盖普通匹配到的结果。 4. 匹配正则的过程中,和正则的为上下位置有关系,因为正则location是匹配到一个随即停止匹配。并不存在普通location的最大前缀匹配原则。
二. location匹配示例
location = / { [ 配置1 ] } location / { [ 配置2 ] } location /documents/ { [ 配置3 ] } location ^~ /images/ { [ 配置4 ] } location ~* .(gif|jpg|jpeg)$ { [ 配置5 ] }
不同URI对应的配置
用户请求的URI | 完整的URL地址 | 匹配的配置 |
/ | http://www.etiantian.org/ | 配置1 |
/index.html | http://www.etiantian.org/index.html | 配置2 |
/documents/document.html | http://www.etiantian.org/documents/document.html | 配置3 |
/images/1.gif | http://www.etiantian.org/images/1.gif | 配置4 |
/documents/1.jpg | http://www.etiantian.org/documents/1.jpg | 配置5 |
三. location匹配实战
验证不同的location标签生效的顺序,nginx配置文件如下
server { listen 80; server_name www.etiantian.org etiantian.org; root html/www; location / { return 401; } location= / { return 402; } location /documents/ { return 403; } location ^~ /images/ { 匹配任何以/images/开头的查询并停止搜索,任何正则表达式匹配不会做检查
return 404; } location ~* .(gif|jpg|jpeg)$ { return 500; } }
检查语法并使修改的配置重启生效后测试网站请求
1. 访问http://www.etiantian.org和http://www.etiantian.org/ ,返回402
说明:URL为空或者/时,匹配了location = / ,精确匹配的优先级最高,无论放置位置如何,都将优先被匹配并执行
2. 访问http://www.etiantian.org/index.html, http://www.etiantian.org/abc/, 都返回401
说明:/ 为默认匹配,如果没有匹配上其他location,最后会匹配默认匹配的部分,所以/abc没匹配上也会返回401
3. 访问http://www.etiantian.org/documents/document.html,会返回403
说明:此部分为路径匹配,匹配了路径/documents/
4. 访问http://www.etiantian.org/documents/1.jpg,返回500
说明:虽然会先匹配普通路径/documents,但是后面又匹配了正则,从而覆盖了前面的普通匹配
5. 访问http://www.etiantian.org/images/1.gif, 返回404
说明:首先匹配了普通路径/images, 因为/images前面有"^~" ,所有即使1.gif匹配了正则匹配,但是也不会做检查