location的作用
location指令的作用是根据用户请求URI来执行不同的应用,location会根据用户请求网站URL进行匹配定位到某个location区块。 如果匹配成功将会处理location块的规则。
location的语法规则如下
1 | location = /uri |
修饰符说明及优先级顺序
优先级的高低表示优先匹配顺讯,可理解为编程当中的switch语法。下面列表从上到下,第一个优先级最高。
1 | = | location = /uri |
=
,精确匹配,表示严格相等,区分大小写
1 | location = /static { |
^~
,匹配以URI开头,对大小写敏感
1 | location ^~ /static { |
~
,使用正则表达式,对大小写敏感。注意:某些操作系统对大小写敏感是不生效的,比如windows操作系统
1 | location ~ ^/static$ { |
~*
,与~
相反,忽略大小写敏感, 使用正则
1 | location ~* ^/static$ { |
/uri
,匹配以/uri
开头的地址
1 | location /static { |
@
用于定义一个Location块,且该块不能被外部Client所访问,只能被nginx内部配置指令所访问,比如 try_files or error_page
1 | location / { |
理解优先级
注意:优先级不是编辑location前后顺序
1 | server { |
http://localhost/static
会输出什么?输出了=
,因为=
表示严格相等,而且优先级是最高http://localhost/static/1.txt
输出什么?输出^~
, 匹配前缀为/static
所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
直接匹配网站根目录,通过域名访问网站首页比较频繁,使用这个会加速处理,比如官网首页。这里里是直接转发给后端应用服务器了,也可以是一个静态首页
1
2
3location = / {
proxy_pass http://tomcat:8080/index
}第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用1
2
3
4
5
6location ^~ /static/ {
root /webroot/static/;
}
location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}第三个规则就是通用规则,用来转发动态请求到后端应用服务器,非静态文件请求就默认是动态请求,自己根据实际把握
1
2
3location / {
proxy_pass http://tomcat:8080/
}