location的作用是将访问的链接定位到资源上,进而修改资源的一些属性(如设置图片的缓存)或者是确定图片的位置,可能是本地的资源,也有可能是proxy_pass代理的后端服务。

基础语法

1
2
3
location [=|~|~*|^~] patt {

}
  • = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
  • ~ 为区分大小写匹配(可用正则表达式)。
  • ~* 为不区分大小写匹配(可用正则表达式)。
  • ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
  • 如果没有上述四种符号,则默认为=

命中规则

  1. =前缀的指令严格匹配这个查询。如果找到,停止搜索。
  2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
  3. 正则表达式,在配置文件中定义的顺序。
  4. 如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。

实战

1
2
3
4
5
6
7
8
9
10
11
12
13
# 第1段
location ~* \.(?:css|js)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
root /data/web/static/;
}

# 第2段
location /static/ {
root /data/web/static/;
index index.html;
}

因为后端是用proxy_pass 服务代理的方式,而静态文件/static/文件夹下的文件没必要走后端了,于是就有了第2段配置,同时又需要给css和js文件设置缓存时间,所以也有了第1段的配置。