1.location 配置有什么用?
location 配置用于匹配指定 URI,然后对匹配的请求进行相关处理。
2.语法规则
location [=|~|~*|^~] /uri/ {...}
符号 | 含义 |
---|---|
= |
表示精确匹配 |
^~ |
表示 URI 以某个常规字符串开头。Nginx 不对 URL 做编码,因此请求为 /static/20%/aa,可以被 ^~ /static/ /aa 匹配到 |
~ |
表示区分大小写的正则匹配 |
~* |
表示不区分大小写的正则匹配 |
/ |
通用匹配,任何请求都会匹配 |
多个 location 配置的情况下匹配顺序为(参考资料而来,还未实际验证):
- 首先匹配
=
- 其次匹配
^~
- 其次是按文件中顺序的正则匹配
- 最后是交给 /
- 当有匹配成功时候,停止匹配,按当前匹配规则处理请求
例子,有如下匹配规则:
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location / {
#规则F
}
那么产生的效果如下:
- 访问根目录 /, 比如 http://localhost/ 将匹配规则 A
- 访问 http://localhost/login 将匹配规则 B,http://localhost/register 则匹配规则 F
- 访问 http://localhost/static/a.html 将匹配规则 C
- 访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则 D 和规则 E,但是规则 D 顺序优先,规则 E 不起作用,而 http://localhost/static/c.png 则优先匹配到规则 C
- 访问 http://localhost/a.PNG 则匹配规则 E,而不会匹配规则 D,因为规则 E 不区分大小写。
- 访问 http://localhost/category/id/1111 则最终匹配到规则 F,因为以上规则都不匹配,这个时候应该是 nginx 转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),nginx 作为反向代理服务器存在。